xml配置springmvc
applicaiton.xml文件位置
Spring ContextLoaderListener和DispatcherServlet加载文件的位置
web.xml中如何配置spring配置文件
在使用Spring框架的时候,如果我们使用的是XML文件配置Bean的方式的话,
我们往往会在web.xml里面配置如下内容:
1 | <context-param> |
- ContextLoaderListener通过contextConfigLocation参数,加载配置;默认加载”/WEB-INF/applicationContext.xml”
- DispatcherServlet默认加载”WEB-INF/dispatcherServlet-servlet.xml”,也可通过contextConfigLocation参数指定配置文件路径
- 配置文件顺序,可以在param-value中指定顺序;也可以通过import方式来指定依赖关系
事务管理
实现事务的三种方式
1.手动事务
applicaiton.xml配置1
2
3
4
5
6
7<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager" ref="transactionManager"/>
</bean>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
TransactionTemplate transactionTemplate;
public void excuteTransactionTemplate(String idA, String idB, int num) {
transactionTemplate.execute(new TransactionCallback<Boolean>() {
public Boolean doInTransaction(TransactionStatus status) {
doSomething(idA, idB, num);
return true;
}
});
}
PlatformTransactionManager transactionManager;
public void executeTransactionManager(String idA, String idB, int num) {
DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
TransactionStatus transactionStatus = transactionManager.getTransaction(definition);
try {
doSomething(idA, idB, num);
transactionManager.commit(transactionStatus);
} catch (Exception e) {
transactionManager.rollback(transactionStatus);
e.printStackTrace();
}
}2.aop
1
2
3
4
5
6
7
8
9
10
11
12<!--配置事务增强 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" read-only="false"/>
</tx:attributes>
</tx:advice>
<!--aop配置,拦截哪些方法 -->
<aop:config>
<aop:pointcut id="servicePointcut" expression="execution(* com.sysware.p2m.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointcut"/>
</aop:config>3.Transactional注解
1
2
3
4
5
6
7<!-- 使用@Transaction注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- 扫描哪些类上的注解 -->
<context:component-scan base-package="com.sysware">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>1
2
3
4
5//用于类或者方法上
(DataServiceImpl.BEAN_NAME)
public class DataServiceImpl implements DataService {
}问题总结
Spring @Transactional注解在什么情况下会失效,为什么?
分析spring事务@Transactional注解在同一个类中的方法之间调用不生效的原因及解决方案
注解配置springmvc
源码
- 下载
git clone --branch v3.2.18.RELEASE https://gitee.com/mirrors/Spring-Framework.git