知识点:
    1.@Configuration(proxyBeanMethods = true)与默认值一样为单实例。

    1. - 如果`@Configuration(proxyBeanMethods = true)`代理对象调用方法。SpringBoot总会检查在容器中是否有这个组件。
    2. - 获取两次Employee类的实例,判断两个实例都否相等,如果相等就是单实例。
    3. - 单实例适用于有依赖关系的场景下,因为有依赖关系要保持依赖类的实例是同一个实例。


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

    • 如果@Configuration(proxyBeanMethods = true)获取两次Employee类的实例,判断两个实例都否相等,如果相等就是单实例。


    第一步:**创建启动类:MainApplication
    image.png

    第二步:创建两个普通类
    image.png

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

    第三步:用注解@Configuration(proxyBeanMethods = true)创建配置文件类,并用@Bena组件注解,创建Employee、User的方法组件。
    image.png
    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 = true)//配置文件类,为单实例
    public class MyConfig {
        @Bean //给容器添加组件
       public Employee getEmployee(){
           return new Employee("工程部",05);
       }
       @Bean
       public User getUser(){
            return new User("张三",25);
       }
    }
    

    第三步:通过启动类MyController 测试
    如果@Configuration(proxyBeanMethods = true)代理对象调用方法。SpringBoot总会检查在容器中是否有这个组件。
    获取两次Employee类的实例,判断两个实例都否相等,如果相等就是单实例。
    结果为:true。

    package com.wzy.boot;
    
    /*
    * @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);//true
    
        }
    }