Интеграция Spring и JFinal (теоретически поддерживает все версии)
Зависимость jar Jfinal, javassist v3.*, Spring v3+ (для версий до 3.2.0 требуется зависимость cglib).
Использование Maven
<dependency>
<groupId>cc.ecore</groupId>
<artifactId>spring-jfinal-plugin</artifactId>
<version>x.x.x</version>
</dependency>
<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>com.demo.test.CommonConfig</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).
Порядок инициализации:
public class HelloJFinalConfig extends JFinalConfig {
@Autowired
public void setApplicationContext(ApplicationContext ctx) {
System.out.println("HelloController attr[ApplicationContext] 已注入。。");
}
...
}
В HelloJFinalConfig происходит автоматическое внедрение springbean, scope = "singleton".
public class HelloController extends Controller {
@Autowired
public void setApplicationContext(ApplicationContext ctx) {
System.out.println("HelloController attr[ApplicationContext] 已注入。。");
}
}
В Controller происходит автоматическое внедрение springbean, scope = "prototype", так как jfinal создаёт экземпляр при каждом запросе.
<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>
Здесь основное внимание уделяется внедрению прокси-сервера данных в ActiveRecordPlugin.
public static void main(String[] args) {
CtFactory.toClass();// 这个必须启动前执行
// ...
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )