为了账号安全,请及时绑定邮箱和手机立即绑定

Spring AOP不适用于另一个方法中的方法调用

Spring AOP不适用于另一个方法中的方法调用

白猪掌柜的 2019-11-14 10:00:40
ABC.java中定义了两种方法public void method1(){   .........   method2();  ...........}public void method2(){  ...............  ...............  }我想有AOP上的呼叫方法2。所以,我创建了一个类,AOPLogger.java,具有在方法提供方面功能的checkAccess在配置文件中,我不喜欢的东西下面<bean id="advice" class="p.AOPLogger" /><aop:config>  <aop:pointcut id="abc" expression="execution(*p.ABC.method2(..))" />  <aop:aspect id="service" ref="advice">    <aop:before pointcut-ref="abc" method="checkAccess" />            </aop:aspect></aop:config>但是,当调用我的method2时,不会调用AOP功能,即不会调用AOPLogger类的checkAccess方法。我有什么想念的吗?
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

我有同样的问题,我克服了通过实现Spring的ApplicationContextAware,BeanNameAware并实施相应的方法如下。


class ABC implements ApplicationContextAware,BeanNameAware{


      @Override

      public void setApplicationContext(ApplicationContext ac) throws BeansException {

          applicationContext=ac;

      }


      @Override

      public void setBeanName(String beanName) {

          this.beanName=beanName;

      }

      private ApplicationContext applicationContext;

      private String beanName;

}

然后我在调用同一类的方法时将其替换this.为 ((ABC) applicationContext.getBean(beanName)).。这样可以确保对同一类方法的调用仅通过代理进行。


因此method1()更改为


 public void method1(){

    .........

    ((ABC) applicationContext.getBean(beanName)).method2();

    ...........

  }

希望这可以帮助。


查看完整回答
反对 回复 2019-11-14
  • 3 回答
  • 0 关注
  • 1049 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信