知识点:
    1、@Configuration(proxyBeanMethods = false)每个@Bean方法被调用多少次返回的组件都是新创建的。因为每次重新创建地址都不同,所以叫多实例。
    2、多实例适用于没有依赖关系的场景下,因为没有依赖关系不用保持依赖类的实例是同一个实例。直接重新创建实例即可。

    验证proxyBeanMethods = false是否为多实例:
    实现步骤:
    1、创建启动类:MainApplication
    2、创建两个Bean类。Employee、User。
    3、用注解@Configuration(proxyBeanMethods = false)创建配置文件类,并用@Bena组件注解,创建Employee、User的方法组件。
    4、启动类中。两次获取容器里面的同个组件,比较地址是否为false。启动启动类验证。

    第一步:创建启动类:MainApplication
    image.png
    第二步:创建两个普通类
    image.png

    1. package com.wzy.boot.bean;
    2. import java.security.PrivateKey;
    3. public class Employee {
    4. private String employeeName;
    5. private Integer employeeId;
    6. //有参与无参构造方法
    7. //gettet与setter方法
    8. }
    1. package com.wzy.boot.bean;
    2. import java.security.PrivateKey;
    3. public class Employee {
    4. private String employeeName;
    5. private Integer employeeId;
    6. //有参与无参构造方法
    7. //gettet与setter方法
    8. }

    第三步:用注解@Configuration(proxyBeanMethods = false)创建配置文件类,并用@Bena组件注解,创建Employee、User的方法组件。
    image.png

    package com.wzy.boot.config;
    
    import com.wzy.boot.bean.Employee;
    import com.wzy.boot.bean.User;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration(proxyBeanMethods = false)//配置文件类,为单实例
    public class MyConfig {
        @Bean //给容器添加组件
       public Employee getEmployee(){
           return new Employee("工程部",05);
       }
       @Bean
       public User getUser(){
            return new User("张三",25);
       }
    }
    

    第四步:通过启动类MyController 测试
    获取两次Employee类的实例,判断两个实例都否相等,如果不相等就是多实例。
    结果为:false。

    package com.wzy.boot;
    
    import com.wzy.boot.bean.Employee;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.SpringBootConfiguration;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.ConfigurableApplicationContext;
    import org.springframework.context.annotation.ComponentScan;
    
    /*
    * @Description: @SpringBootApplication:这是一个SpringBoot应用
    * @Author: WangZiYao
    * @Date: 2021/4/8 15:57
    */
    
    /*@SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan("com.wzy.controller")*/
    @SpringBootApplication(scanBasePackages = "com.wzy.boot")
    public class MainApplication {
        public static void main(String[] args) {
            //1.获取IOC容器
            ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
            //2.查看容器里的组件
            String[] names = run.getBeanDefinitionNames();
            for (String name : names) {
                System.out.println(name);
            }
    
            //3.从容器中获取组件
            Employee employee1 = run.getBean("getEmployee", Employee.class);
            Employee employee2 = run.getBean("getEmployee", Employee.class);
            System.out.println(employee1 == employee2);//false
    
        }
    }