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"/>