java-springmvc配置

xml配置springmvc

applicaiton.xml文件位置

Spring ContextLoaderListener和DispatcherServlet加载文件的位置
web.xml中如何配置spring配置文件
在使用Spring框架的时候,如果我们使用的是XML文件配置Bean的方式的话,
我们往往会在web.xml里面配置如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/application-beanconfig.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring/dispatcher-servlet.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.json</url-pattern>
</servlet-mapping>
  • 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
    @Autowired
    TransactionTemplate transactionTemplate;

    @Override
    public void excuteTransactionTemplate(String idA, String idB, int num) {
    transactionTemplate.execute(new TransactionCallback<Boolean>() {
    @Override
    public Boolean doInTransaction(TransactionStatus status) {
    doSomething(idA, idB, num);
    return true;
    }
    });
    }

    @Autowired
    PlatformTransactionManager transactionManager;

    @Override
    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
    @Transactional //用于类或者方法上
    @Service(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