1 Star 0 Fork 24

孙宇 / spring-jfinal

forked from ylx252 / spring-jfinal 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

#spring-jfinal 作用于 spring 和 jfinal 的整合。

1、web.xml

	<!-- 推荐使用 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>WEB-INF/spring.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
    <filter>
        <filter-name>jfinal</filter-name>
    	<filter-class>com.jfinal.core.SpringJFinalFilter</filter-class>
    	<init-param>
    		<param-name>configClass</param-name>
    		<param-value>demo.run.JfinalConfig</param-value>
    	</init-param>
    	<!-- 不推荐使用。 
    		参数有 contextConfigLocation 	(对应 ClassPathXmlApplicationContext)
    		、configurations 			(对应 FileSystemXmlApplicationContext)
    		、annotatedClasses 			(对应 AnnotationConfigApplicationContext)
    		、basePackages 				(对应 AnnotationConfigApplicationContext)
    		四选一,支持  context-param,优先 init-param.
    		其中 configurations 相当于 PathKit.getWebRootPath() + "/" + WEB-INF/spring.xml.
    		支持多个配置文件以 "," 分割。
    	<init-param>
    		<param-name>configurations</param-name>
    		<param-value>WEB-INF/spring.xml</param-value>
    	</init-param>
    	 -->
    </filter>
    <filter-mapping>
    	<filter-name>jfinal</filter-name>
    	<url-pattern>/*</url-pattern>
    </filter-mapping>

以上通过 SpringJFinalFilter 过滤器加载 spring 。 其中 JfinalConfig 自动注册 springbean(JfinalConfig 中可以使用 注解注入属性哦,或者 实现 ApplicationContextAware  接口自动注入 ApplicationContext)。

初始化顺序(不配置 ContextLoaderListener 的情况下): SpringJFinalFilter -> ApplicationContext -> JFinal -> -> JFinalConfig ... (其他 照旧 ) . 初始化顺序(配置 ContextLoaderListener 的情况下)。 ApplicationContext -> SpringJFinalFilter -> JFinal -> -> JFinalConfig ... (其他 照旧 ) .

2、JFinalConfig

	public class HelloJFinalConfig extends JFinalConfig {
	
		@Autowired
		public void setApplicationContext(ApplicationContext ctx) {
			System.out.println("HelloController attr[ApplicationContext] 已注入。。");
		}
		...
	}

其中 HelloJFinalConfig 自动注入 springbean , scope = "singleton" .

3、Controller

	public class HelloController extends Controller {
	
		@Autowired
		public void setApplicationContext(ApplicationContext ctx) {
			System.out.println("HelloController attr[ApplicationContext] 已注入。。");
		}
	}

其中 Controller 自动注入 springbean , scope = "prototype" 原因是 jfinal 也是每次请求创建实例 .

4、页面使用 ApplicationContext

添加 ContextSpringHandler 就可以了。使用方式可以参照 ContextPathHandler。

5、spring 事物管理

    <bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
		<property name="username" value="${db.userName}" />
		<property name="password" value="${db.passWord}" />
		<property name="url" value="${db.jdbcUrl}" />
		<property name="driverClassName" value="${db.driverClassName}" />
		<property name="initialSize" value="${db.initialSize}" />
		<property name="maxActive" value="${db.maxActive}" />
		<property name="minIdle" value="${db.minIdle}" />
	</bean>
	<!-- spring 事物管理 ,ActiveRecordPlugin可以获得此 dataSource 可以把事务交给spring 管理 -->
	<bean id="dataSourceProxy" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
		<property name="targetDataSource" ref="druidDataSource" />
	</bean>

	<!-- ================================事务相关控制================================================= -->
	<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSourceProxy"></property>
	</bean>

	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="delete*" propagation="REQUIRED" read-only="false" />
			<tx:method name="insert*" propagation="REQUIRED" read-only="false" />
			<tx:method name="update*" propagation="REQUIRED" read-only="false" />

			<tx:method name="find*" propagation="SUPPORTS" />
			<tx:method name="get*" propagation="SUPPORTS" />
			<tx:method name="select*" propagation="SUPPORTS" />
		</tx:attributes>
	</tx:advice>

	<!-- 把事务控制在Service层 -->
	<aop:config>
		<aop:pointcut id="pc" expression="execution(public * demo.service.*.*(..))" />
		<aop:advisor pointcut-ref="pc" advice-ref="txAdvice" />
	</aop:config>

以上是 xml 配置方式。 重点是在 ActiveRecordPlugin 中注入 代理数据源。

6、基于 SpringPlugin 的 加载 spring .

	public class JFinalConfigMe extends JFinalConfig {
		private ApplicationContext ctx;
		
		// lazy (原因是 jfinal 先实例化 JFinalConfig 在 JFinal.init 初始化相关配置 )
		public ApplicationContext getApplicationContext(){
			if(ctx == null) ctx = WebApplicationContextUtils.getWebApplicationContext(JFinal.me().getServletContext());
			return ctx;
		}
	
		@Override
		public void configConstant(Constants me) { }
		@Override
		public void configRoute(Routes me) { }
		@Override
		public void configPlugin(Plugins me) {
			me.add(new SpringPlugin(getApplicationContext()));
		}
		@Override
		public void configInterceptor(Interceptors me) { }
		@Override
		public void configHandler(Handlers me) { }
	}
  • 可以使用 加载 WEB-INF 下的文件哦(需要配置 ContextLoaderListener) 推荐.
  • 如果不配置 ContextLoaderListener 使用 WEB-INF 下的文件 的 classpath:../**文件。

7、更多支持

  • spring-jfinal 下载地址[http://pan.baidu.com/s/1i3Dw08P#path=%252Fspring-jfinal]
  • oschina 开源社区 [http://www.oschina.net/p/spring-jfinal?from=mail-notify]
  • JFinal 官方网站 http://www.jfinal.com
  • 关注官方微信号马上体验 demo 功能
    JFinal Weixin SDK

空文件

简介

用于整合 spring + jfinal . 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/sphsyv/spring-jfinal.git
git@gitee.com:sphsyv/spring-jfinal.git
sphsyv
spring-jfinal
spring-jfinal
master

搜索帮助