spring配置文件
参考
spring context:component-scan 使用说明(转) 为啥Spring和Spring MVC包扫描要分开? Springmvc controller 层 @Transactional 不起作用
知识点
spring mvc是对spring的扩展,在spring的基础上增加了对<servlet>
的更多的支持
关于Spring事务\的理解
参考: 关于Spring事务\的理解
注解前缀: 在使用SpringMvc的时候,配置文件中我们经常看到 annotation-driven 这样的注解,其含义就是支持注解,一般根据前缀 tx、mvc 等也能很直白的理解出来分别的作用。 就是支持事务注解的(@Transactional) 、 就是支持mvc注解的,说白了就是使Controller中可以使用MVC的各种注解。
事物配置位置说明:
\ only looks for @Transactional on beans in the same application context it is defined in. This means that, if you put \ in a WebApplicationContext for a DispatcherServlet, it only checks for @Transactional beans in your controllers, and not your services.
意思就是:\只会查找和它在相同的应用上下文(spirng的上下文 和 spring mvc的上下文就是两个不同的上下文)中定义的bean上面的@Transactional注解,如果你把它放在Dispatcher的应用上下文中,它只检查控制器(Controller)上的@Transactional注解,而不是你services上的@Transactional注解。 所以,可以确定的是我们是可以在Controller上使用事务注解的,但是我们不推荐这样做(本人也从来没有这样做过),这里只是为了说明spring对\的使用。
补充说明: 如果我们在spring的配置文件中
加载顺序
在这个配置文件中,contextConfigLocation先加载,DispatcherServlet后加载
原理:Spring 是父容器, Spring MVC是子容器, 子容器可以访问父容器的bean,父容器不能访问子容器的bean 参考:为啥Spring和Spring MVC包扫描要分开?
配置如下:
dispatcherServlet配置 spring-mvc.xml(spring-mvc 配置) mvc是子容器 mvc配置加载controller,并排出其他的,注意要使用use-default-filters="false"
不去使用默认扫描
contextConfigLocation 配置spring-context.xml(spring 配置) spring是主/父容器 exclude-filter
会在默认扫描(use-default-filters不指定会使用默认的扫描)的注解中过滤掉指定的注解
这个就相当于base-package="com.mxmht.xxx" 楼上的com.xxx
将Spring的配置controller的扫描关掉了,让Spring-MVC自己去扫描自己的controller. @transanction解释器的部分,将@transanction解释器在Spring-mvc中开启,这样就ok了。 自己在想了一下实际上就是Spring与Spring mvc配置文件解析的是分开的,你在applicationContext.xml里面开启了@transanction解释器,就会在applicationContext.xml配置的扫描包的时候把扫描到的@transanction这样的注解开启事务,然后Spring-mvc.xml也有扫描而且没有开启解释器就把,有事务功能的controller替换为没有事务功能的controller,@Transactional 就不起作用
application.properties文件配置
SpringBoot配置属性之DataSource
SpringBoot配置属性之DataSource - xixicat - SegmentFault
Last updated