Spring5.2-proxyBeanMethods作用

有了 proxyBeanMethods 属性后,配置类不会被代理了。主要是为了提高性能,如果你的 @Bean 方法之间没有调用关系的话可以把 proxyBeanMethods 设置为 false。否则,方法内部引用的类生产的类和 Spring 容器中类是两个类。

前面说了加了 proxyBeanMethods 之后不会被代理了,所以配置类和方法也可以使用 final 修饰了,5.2之前的版本是强制校验的。

源码解析:

ConfigurationClass

public void validate(ProblemReporter problemReporter) {
    // A configuration class may not be final (CGLIB limitation) unless it declares proxyBeanMethods=false
    Map attributes = this.metadata.getAnnotationAttributes(Configuration.class.getName());
    if (attributes != null && (Boolean) attributes.get("proxyBeanMethods")) {
        if (this.metadata.isFinal()) {
            problemReporter.error(new FinalConfigurationProblem());
        }
        for (BeanMethod beanMethod : this.beanMethods) {
            beanMethod.validate(problemReporter);
        }
    }
}

大家动手测试下就知道怎么回事了。

你可能感兴趣的:(Spring5.2-proxyBeanMethods作用)