我正在玩 Spring AOP。
这是一个简单的类
public class CModel extends Car {
private double torqueMeasure = 1;
public CModel() {
System.out.println(" C-Model constructor");
}
}
而Spring的配置是这样的
<aop:config>
<aop:aspect ref="audit">
<aop:before pointcut="execution(* com.test.main..*(..))" method="firstControl"/>
...
</aop:aspect>
</aop:config>
现在好了;当我添加 aop:config 并拦截 CModel 时,Spring 会调用 CModel 构造函数两次。这意味着 Spring 创建了 2 个 CModel 对象,对吗?
如果我删除 AOP 配置,那么 Spring 只会创建一个 CModel 对象。
知道为什么会这样吗?
谢谢。
最佳答案
虽然我不确定,但我的猜测是spring首先实例化了常规类,然后做了一个CGLIB代理,它是一个子类。请注意,对于初始化,您应该使用 @PostConstruct
,保证使用一次。
为了验证我的假设,在构造函数中添加一个断点并查看它何时被调用 - 其中一个应该紧接在 CModel$EnhancedByCGLIB
something 之后
关于java - Spring AOP 创建额外的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7968248/