java - Spring AOP 创建额外的 bean

标签 java spring aop spring-aop

我正在玩 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/

相关文章:

java - 如何为 Postmapping 方法编写 junit 测试

java - 读取监听器内的 Spring boot 属性

java - 根据返回值调用切面

java - 面向方面的编程 - 什么是 'cflow' ?

java - 将两个 BufferedImage 并排复制到一张图像中

java - Android 格式化包含国家/地区代码的国际电话号码字符串

java - 为具有泛型类型的 Java POJO 生成 Avro 架构

java - 测试时模拟@Service 连接到数据库

java - Spring 是否在容器初始化其过滤器之前设置应用程序上下文?

java - Spring AOP 监控 Apache HttpClient.execute