当前位置:网站首页>@Detailed introduction of configuration annotation

@Detailed introduction of configuration annotation

2022-07-07 23:44:00 TPH-BETTER

from https://www.cnblogs.com/init-qiancheng/p/14623522.html

@Target({
    ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
    
    @AliasFor(
        annotation = Component.class
    )
    String value() default "";

    boolean proxyBeanMethods() default true;
}

According to the definition of this annotation , The annotation is first a component , So it will be @SpringBootApplication Annotation scan ( The premise of scanning is that the annotation must be in the same package or sub package as the startup class ) There is an attribute in this annotation proxyBeanMethods, The default value for this property is true, This attribute can be divided into two modes

  • Full Pattern ( Is the default ):proxyBeanMethods = true;
  • Lite Pattern :proxyBeanMethods = false;

Full Patterns and Lite The difference between patterns

Use Full Pattern , This configuration class is represented , You can solve the dependencies between components , He will first check whether there are instances of components in the container , If it exists, it will be used directly , If it doesn't exist, it will be created ;

If it is Lite Pattern , There will be no proxy class , Each call will be executed once ,SpringBoot Will skip the steps of searching in the container ;

When to use Full and Lite

When there is no component dependency, it is used Lite, This will make the program start faster ;
When there is component dependency, it is used Full, Is the default ;

MyConfig.java

/** * 1、 The configuration class uses @Bean Label the method to register the component to the container , The default is also single instance  * 2、 The configuration class itself is also a component  * 3、proxyBeanMethods: agent bean Methods  * Full(proxyBeanMethods = true)、【 Make sure that each @Bean Method is called many times and the returned component is single instance 】 * Lite(proxyBeanMethods = false)【 Every @Bean Method is called many times and the returned component is newly created 】 *  Component dependencies must use Full Mode default . Other defaults are Lite Pattern  */
@Configuration(proxyBeanMethods = false)// tell SpringBoot This is a configuration class  ==  The configuration file 
public class MyConfig {
    

    /** * Full: No matter how many times you call the component registration method in the configuration class, you get the single instance object in the previous registration container  * * @return */
    @Bean// Add components to the container . Using the method name as the name of the component id. The return type is the component type . The value returned , Is an instance of a component in a container 
    public People people() {
    
        return new People(1, " Transference ", dog());
    }

    @Bean
    public Dog dog() {
    
        return new Dog(1, " Hee hee ");
    }
}
 Start class 

@SpringBootApplication
public class QianchengApplication {
    

    public static void main(String[] args) {
    
        ApplicationContext context = SpringApplication.run(QianchengApplication.class, args);
        /** *  Use Full Mode will output  * [email protected]7aae97b * true */
        /** *  Use Late Mode output  * [email protected] * false */
        MyConfig bean = context.getBean(MyConfig.class);
        System.out.println(bean);
        People people = context.getBean("people", People.class);
        Dog dog1 = context.getBean("dog", Dog.class);
        System.out.println(people.getDog() == dog1);
    }
}
原网站

版权声明
本文为[TPH-BETTER]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/188/202207072124116149.html