我是 Spring AOP 的新手,我想知道是否可以使用 Spring AOP 实现我的项目。具体来说,我想知道在 Spring AOP 中是否可以在运行时配置哪些方面将被执行以及以何种顺序执行。注意:我只想控制我的应用程序方面,而不干扰 Spring 管理的方面,如事务或安全性。
问问题
1119 次
1 回答
2
您可以控制 aspesct 的顺序(使用声明优先级),但在运行时很难做到这一点,因为它需要为已经编织的类重新应用编织。指定要执行的方面也是如此。
您可以在每个方面方法的开头进行 if(!enabled){return;} 检查,并且可以像任何普通 bean 一样设置启用或禁用标志。这样,方面总是被编织进去,但如果它们被禁用,它们将无能为力。
更新
这是如何将方面用作 bean 的示例。假设您有这样的方面:
@Component // IMPORTANT
public aspect MyAspect {
Object responder;
public void setResponder(Object object) {
this.responder=object;
}
}
然后在你的 spring 服务类中,你可以像这样连接方面:
@Service
public class MyServiceImpl implements MyService {
@Autowired
MyAspect aspect;
void action() {
aspect.setResponder(null);
}
}
这是可行的,因为方面实际上是 java 类。组件注释使方面被spring组件扫描识别为bean。我已经成功编译了这段代码,但实际上并没有在运行时测试它,所以很高兴知道它是否有效。
于 2013-01-13T14:44:20.840 回答