微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

春季-是否可以为动态实例化的类编织一个方面?

我使用Spring并具有包装某些类的方面:

@Aspect
public class LoggingAspect{

    @Around("execution(public * com.service.MyService.doStuff(..))")
    public Object log(){
        ...
    }
}

并在上下文xml中:

<aop:aspectj-autoproxy/>
<bean id="loggingAspect" class="com.bla.bla.bla.LoggingAspect"/>

问题在于MyService的实例是在运行时创建的,因此Spring在上下文初始化阶段对此类一无所知.在这种情况下,是否可以使用方面来包装使用new(不是Spring)实例化的类的方法调用

最佳答案
如果我的the Spring docs读数正确,那么您可以这样做(对于基于Spring代理的编织):

ProxyFactory factory = new ProxyFactory(new SimplePojo());
factory.addInterface(Pojo.class);
factory.addAdvice(new RetryAdvice());

Pojo pojo = (Pojo) factory.getProxy();

或这样(用于AspectJ风格的编织):

AspectJProxyFactory factory = new AspectJProxyFactory(new SimplePojo()); 
factory.addAspect(new RetryAspect());

Pojo proxy = factory.getProxy();

(我通过Bean配置驱动所有AOP编织,因此实际上不需要使用这种方法.)

原文地址:https://www.jb51.cc/spring/531707.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐