织梦CMS - 轻松建站从此开始!

澳门威尼斯人国际娱乐   威尼斯人娱乐城网上注册   澳门威尼斯人娱乐城网上注册【信誉】

SpringMVC对包的扫描范围扩大后,导致的事务配置

时间:2018-01-09 02:03来源:网络整理 作者:采集侠 点击:
淘宝网冬装女装外套,秋装新款女装外套长款毛衣,时尚女装夏装连衣裙

项目使用的框架:Spring 4.1.4 + Hibernate 4.3.8 + MySQL。

web.xml中对Spring的配置:

<!-- 把 Spring 容器集成到 Web 应用里面 --> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <!-- spring配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/applicationContext.xml</param-value> </context-param> <!--DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派, 而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处。--> <!--DispatcherServlet会默认加载[servlet-name]-servlet.xml文件--> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </s女装棉麻原创_京东上衣女装新款图片及价格ervlet-mapping>

项目使用AOP声明式事务配置

<!-- 声明式容器事务管理 ,transaction-manager指定事务管理器为transactionManager --> <tx:advice id="transactionAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="query*" read-only="true"/> <tx:method name="get*" read-only="true"/> <tx:method name="save*" rollback-for="Exception" propagation="REQUIRED"/> <tx:method name="update*" rollback-for="Exception" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <aop:config> <!--只对业务逻辑层实施事务 --> <aop:pointcut expression="execution(* com.zhimajp.auction.service.impl..*.*(..))" id="busiLogicService"/> <aop:advisor advice-ref="transactionAdvice" pointcut-ref="busiLogicService"/> </aop:config>

采用annotation方式声明Spring Bean。

遇到的问题是:通过Hibernate执行save方法后,数据未能插入到DB中并且控制台也没有打印出SQL(控制台没有输出)。

解决问题

通过仔细排查,阅读网络文章后,发现问题出现在spring-servlet.xml中:

<!--扫描注解包 配置这条便可移除 <context:annotation-config/> --> <context:买一送一 嫁给亿万首席全文免费阅读_外贸女装货源批发市场在哪里component-scan base-package="com.zhimajp.auction" />

上述配置的结果是:SpringMVC对Service和Dao的所有package进行了扫描装载。

问题分析:

1、Spring与SpringMVC属于父子容器关系。框架启动时先启动Spring容器,而后启动SpringMVC容器。子容器可以访问父容器中的Bean,而父容器不能访问子容器中的Bean。

2、由于SpringMVC在扫描时扩大了扫描范围,装载了@Service标识的类的实例,从而导致Controller层在注入Service时,实际注入的时子容器中的Service实例。

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容