我一直在寻找答案,但到目前为止没有运气,所以我来这里寻求一些智慧的话。
我已经使用@Aspect注释创建了一个方面,因为我需要@Autowire一些单例依赖关系我决定使用@Component注释这个方面类,并让Spring做出魔术。但它有效......
我非常熟悉AOP的概念,它的编织方式和不同的风格(cglib vs aspectj),但它对我的说法并不完全直观。
@Component意味着给定的类将是给定上下文中的单例,@ Aspect意味着在运行时/编译期间,方面类的内容将以某种方式编织到目标类中 - 并且此目标类不是单例但是例如原型。那么我最后会得到什么呢?
答案 0 :(得分:3)
Spring AOP不进行编译时编织,也不修改建议目标的代码。相反,它适用于在连接点周围编织的代理。这就是为什么Spring AOP方面被用作(单例)组件,使其字段自动装配等,就像任何其他Spring代理一样。
这也是Spring AOP方面仅适用于公共方法执行而不是字段访问等的原因。
文档编写得非常好,并且可以根据需要尽可能多地(或尽可能少)详细说明: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html
答案 1 :(得分:1)