0

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

4

1 回答 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 回答