我是Spring AOP的新手,我想知道是否可以用Spring AOP实现我的项目。具体来说,我想知道在Spring AOP中是否可以在运行时配置将执行哪些方面以及以何种顺序执行。注意:我想只控制我的应用程序方面,而不会干扰Spring管理的方面,如事务或安全性。
答案 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。 我已经成功编译了这段代码,但实际上没有测试它的运行时间,所以很高兴知道它是否有效。