AopUtils.isAopProxy(Object object) AopUtils.isCglibProxy(Object object) //cglib AopUtils.isJdkDynamicProxy(Object object) //jdk動態代理 <aop:config proxy-target-class="true" />可強制cglib代理
public int save(String name, int age) throws Exception { insert(name, age); return 1; } @Transactional public void insert(String name, int age){ jdbcTemplate.update("insert into user(id,name,age)values(1,'"+name+"',"+age+")"); jdbcTemplate.update("insert into user(id,name,age)values(2,'"+name+"',"+age+")"); }
七、集成了Shiro,並將以下代碼與Shiro配置放在一個文件中。可參見 https://blog.csdn.net/m0_37962779/article/details/78605478 。解決辦法是將以下代碼與Shiro配置做爲兩個@Config分別配置。java
@Bean @DependsOn({"lifecycleBeanPostProcessor"}) public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator() { DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator(); advisorAutoProxyCreator.setProxyTargetClass(true); return advisorAutoProxyCreator; } @Bean public static LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { return new LifecycleBeanPostProcessor(); }
另外經過開啓事務日誌能夠較方便的發現問題。spring
<logger name="org.springframework.transaction" level="TRACE"/>