Spring中的动态AOP配置

时间:2013-01-13 13:50:07

标签: spring spring-aop

我是Spring AOP的新手,我想知道是否可以用Spring AOP实现我的项目。具体来说,我想知道在Spring AOP中是否可以在运行时配置将执行哪些方面以及以何种顺序执行。注意:我想只控制我的应用程序方面,而不会干扰Spring管理的方面,如事务或安全性。

1 个答案:

答案 0 :(得分:2)

您可以控制aspesct的排序(使用声明优先级),但在运行时很难做到这一点,因为它需要为已经编织的类重新应用编织。 指定要执行的方面也是如此。

您可以在每个方面方法的开头检查if(!enabled){return;},并且可以像任何普通bean一样设置启用或禁用启用标志。这样,方面总是被编织进去,但是如果它们被禁用它们将无能为力。

<强>更新

以下是如何将方面用作bean的示例。 让我们说你有这样一个方面:

@Component // IMPORTANT
public aspect MyAspect {
    Object responder;

    public void setResponder(Object object) {
        this.responder=object;
    }
}

然后在您的春季服务课程中,您可以像这样连接方面:

@Service
public class MyServiceImpl implements MyService {
    @Autowired
    MyAspect aspect;

    void action() {
        aspect.setResponder(null);
    }
}

这是有效的,因为方面实际上是java类。组件注释导致通过弹簧组件扫描将方面识别为bean。 我已经成功编译了这段代码,但实际上没有测试它的运行时间,所以很高兴知道它是否有效。