【Spring】SpringAop被执行两次的原因分析,单元测试导致也是一种情况。

背景

最近无意中去用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,然后访问。

在这里插入图片描述

结果!!!!好了!!!!我一口老血差点吐在电脑上,不过问题还是解决了,希望遇到这种情况,大家能把这种情况也考虑进去试一下。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰肥啊

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值