JFinal框架也整合了spring框架,下面实现JFinal怎么去配置Spring框架。在JFinal中整合Spring使用到的类是SpringPlugin和IocInterceptor类
SpringIplugin类:
SpringPlugin 是作为 JFinal 的 Plugin 而存在的,所以使用时需要在 JFinalConfig 中配置SpringPlugin,以下是 Plugin 配置示例代码:

1 /** 2 * 配置插件 3 */ 4 @Override 5 public void configPlugin(Plugins me) { 6 //ConfigDBPluginHelper.configOraclePlugin(me); 7 //配置Spring挂件, 自动找spring包中所有的xml配置文件 8 me.add(new SpringPlugin("classpath*:spring/*.xml")); 9 }
以上设置默认spring配置xml在src/spring包下
如果设置sringPlugin的时候,没有设置路径

1 /** 2 * 配置插件 3 */ 4 @Override 5 public void configPlugin(Plugins me) { 6 //ConfigDBPluginHelper.configOraclePlugin(me); 7 //配置Spring挂件, 自动找spring包中所有的xml配置文件 8 me.add(new SpringPlugin()); 9 }
SpringPlugin 将 自动去WebRoot/WEB-INF 目录下寻找 applicationContext.xml 作为配置文件进行初始化。
IocInterceptor类:
IocInterceptor 拦截 action 并对其进行依赖注入,以下是示例代码:

1 package com.demo.testSpring; 2 3 import com.jfinal.aop.Before; 4 import com.jfinal.core.Controller; 5 import com.jfinal.plugin.spring.IocInterceptor; 6 import com.jfinal.plugin.spring.Inject; 7 8 @Before(IocInterceptor.class) 9 public class testSpringController extends Controller{ 10 11 @Inject.BY_NAME 12 private Animal animal; 13 14 public void test(){ 15 animal.move(); 16 animal.jump(); 17 renderNull(); 18 } 19 }

1 package com.demo.testSpring; 2 3 public class Animal { 4 private String animalName; 5 6 public void setAnimalName(String animalName) { 7 this.animalName = animalName; 8 } 9 10 public void move(){ 11 System.out.println(animalName+" move"); 12 } 13 14 public void jump(){ 15 System.out.println(animalName+" jump"); 16 } 17 }

1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:aop="http://www.springframework.org/schema/aop" 5 xmlns:tx="http://www.springframework.org/schema/tx" 6 xsi:schemaLocation=" 7 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 8 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 9 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 10 11 <bean id="animal" class="com.demo.testSpring.Animal"> 12 <property name="animalName"> 13 <value>dog</value> 14 </property> 15 </bean> 16 17 </beans>
需要的jar包
注:IocInterceptor可以设置为全局拦截器;

1 /** 2 * 配置全局拦截器 3 */ 4 public void configInterceptor(Interceptors me) { 5 me.add(new IocInterceptor()); 6 }
如果在非Controller中的类中使用spring注入,不需要那么多注解,只需要在xml中配置即可。如下:

1 package com.demo.testSpring; 2 3 public class Cat { 4 5 private Animal animal; 6 7 public void setAnimal(Animal animal) { 8 this.animal = animal; 9 } 10 11 public void test(){ 12 animal.move(); 13 animal.jump(); 14 } 15 }

1 package com.demo.testSpring; 2 3 import com.jfinal.core.Controller; 4 import com.jfinal.plugin.spring.Inject; 5 6 public class testSpringController extends Controller{ 7 8 @Inject.BY_NAME 9 private Cat cat; 10 11 public void test(){ 12 13 cat.test(); 14 renderNull(); 15 } 16 }

1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:aop="http://www.springframework.org/schema/aop" 5 xmlns:tx="http://www.springframework.org/schema/tx" 6 xsi:schemaLocation=" 7 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 8 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 9 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 10 11 <bean id="animal" class="com.demo.testSpring.Animal"> 12 <property name="animalName"> 13 <value>dog</value> 14 </property> 15 </bean> 16 17 <bean id="cat" class="com.demo.testSpring.Cat"> 18 <property name="animal"> 19 <ref bean="animal"/> 20 </property> 21 </bean> 22 23 </beans>
jfinal不提供自动注入功能,如autowared