iBase4J 架构研究
整体封装的非常好,开源少有的精品之作。
实现了 nginx 反向代理与后台进行动静分离,基于接口进行业务处理。
base 包中
BaseModel 的扩展属性有用,可以精确记录到每条数据是谁记录的,其创建时间,数据更新时间也是动态弄的的,最好的是支持了 Redis缓存,只是不知道,缓存中的数据删除后,如何通知其他系统。。。
BaseMapper 扩展的方法不多。
整体来说,支持读写分离,但不支持分库分表。
config 包中
实现了 druid 密文解密,Swagger 接口管理,i18n 第三方国际化,重写了Redis KeyGenerate管理redisKey
exception 包中
抽象了父类 BaseException,及 HttpCode方法。实现了业务,数据解析,文件上传,参数错误,登录等异常。
interceptor 包中
实现了 BaseInterceptor 拦截器链,其实跟直接在Spring-web.xml中配置没有什么区别。
可以优化的一点是,可以增加一个拦截器注解,动态控制此拦截器是否可拔插,而不是在nextInterceptor配置多份。
support 包中
对于常用的组件分类都很完善,没什么补充必要。
util 包中
每个类的命名都很规范。
工程国际化
在Assert与拦截器中实现了国际化,但很恶心的一点就是,需要写i18n配置文件。
service 层
砍去接口层,如 IService层,直接以实现层来代替,douboox整合的时候应该不是非常方便。
很恶心的一点就是要增加 @Transactional 手动控制事务。
支持redis缓存也要写注解,@CachePut 等。
controller 参数使用 ModelMap传递,内部再使用Request2ModelUtil.covert转换,不如直接使用domain对象接收即可。
其他的比如:
ftp,fastdfs,shiro,redis 就不详细说了。
实现了国际化,但很恶心的一点就是,需要写i18n配置文件
J2EE国际化有什么不使用i18n配置文件吗?
愿闻其详。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
看你的评论,感觉框架整体不错。如果你能把你觉得恶心的地方,改过来就好了
确实写的很棒!
再看有点小问题,感觉作者对于SpringMVC xml配置方面的理解还有待加强,从Spring-sevlet.xml中看的话,有些是完全没必要的,可以参考这个 spring4的最小化配置。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 激活组件扫描功能,扫描aop的相关组件组件 -->
<context:component-scan base-package="com.yingjun.ssm.aop"/>
<!-- 启动对@AspectJ注解的支持 -->
<aop:aspectj-autoproxy proxy-target-class="true" />
<!--开始springMVC注解模式-->
<!--简化配置:
1、自动注册DefaultAnnotationHandlerMapping,AnnotationMethodHandlerAdapter
2、提供一系列:数据绑定,数字和日期的format,@NumberFormat,@DataTimeFormat,xml,json默认读写支持
-->
<mvc:annotation-driven />
<!--2:静态资源默认servlet配置
1、加入对静态资源的处理:js,css,gif,png
2、允许使用"/"做整体映射
-->
<mvc:default-servlet-handler/>
<!--配置JSP 显示ViewResolver-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--扫描web相关的bean-->
<context:component-scan base-package="com.yingjun.ssm.web"/>
<!--全局异常捕捉 -->
<bean class="com.yingjun.ssm.exception.GlobalExceptionResolver" />
</beans>
我补充几点:
一般我们的后台管理系统是直接访问数据库的(没有缓存),provider为用户端api或其他子系统提供服务,可能会加上一些缓存或其他处理。如果是provider依赖service这样会不会好一点?这样后台管理就可以单独运行,不用调dubbo服务
这样的api对调用端不是很友好,如果使用实体作为参数,实体没有包含的字段,可以在BaseModel里封装一个map作为额外参数
启动Failure obtaining db row lock: Table 'ibase4j.QRTZ_LOCKS' doesn't exist
看了一下CsrfFilter的代码,对CSRF的解决方案是采用Referer头,然后匹配白名单来实现。这样岂不是每增加一个url就要配置在白名单里面? 有没有更好的方案?
service如果也就是dubbo服务,如果用jar启动的话由于又依赖了servlet的jar,所以启动会有问题的
怎么打包成jar执行文件
登录 后才可以发表评论