【Spring】SpringAop被执行两次的原因分析,单元测试导致也是一种情况。
背景最近无意中去用Spring的切面写一些东西的时候,在测试时发现总是会被执行2次。看到网上有说@Commpent重复的,或者在配置里多写了,总之是重复了,让容器帮你产生了2个代理,所以执行了2次。这是最常见的情况,为什么写这个文章呢?是因为下面的这种情况比较恶心,直接上代码!代码自定义的切面类,什么注解也没用public class DataSourceAspect {pub......
·
背景
最近无意中去用Spring的切面写一些东西的时候,在测试时发现总是会被执行2次。看到网上有说@Commpent
重复的,或者在配置里多写了,总之是重复了,让容器帮你产生了2个代理,所以执行了2次。这是最常见的情况,为什么写这个文章呢?是因为下面的这种情况比较恶心,直接上代码!
代码
自定义的切面类,什么注解也没用
public class DataSourceAspect {
public void before(){
System.out.println("before...");
}
}
很简单的一个类,基本不存在什么多写注解然后被扫描到生成2次的情况。
配置
<!--自定义切面类-->
<bean class="com.tb121.ssm.aspect.DataSourceAspect" id="myAspect"></bean>
<aop:config>
<!--execution(* com.a121tongbu..*.facade..*(..)))-->
<!--execution(* com.a121tongbu..*.facade..*(..)))-->
<aop:pointcut id="txPointcut" expression="(execution(* com.tb121.ssm.service.impl..*.*(..)))"/>
<aop:aspect ref="myAspect" >
<aop:before method="before" pointcut-ref="txPointcut"></aop:before>
</aop:aspect>
</aop:config>
调用的测试类
public class TestAspect extends TestBaseJunit {
@Resource
private PersonService personService;
@Resource
private TestAspService testAspService;
@Test
public void fun2() {
personService.insert();
}
}
结果
调试了很久之后,感觉都挑不出毛病,但最后结果都是before before两次,最后实在没办法,最后一次希望,不用这个测试的,把整个项目跑起来,直接访问试试看。
随后简单写了一个controller,然后访问。
结果!!!!好了!!!!我一口老血差点吐在电脑上,不过问题还是解决了,希望遇到这种情况,大家能把这种情况也考虑进去试一下。
更多推荐
已为社区贡献5条内容
所有评论(0)