知识点:1.@Configuration(proxyBeanMethods = true)
与默认值一样为单实例。
- 如果`@Configuration(proxyBeanMethods = true)`代理对象调用方法。SpringBoot总会检查在容器中是否有这个组件。
- 获取两次Employee类的实例,判断两个实例都否相等,如果相等就是单实例。
- 单实例适用于有依赖关系的场景下,因为有依赖关系要保持依赖类的实例是同一个实例。
验证proxyBeanMethods = true
是否为单实例:
实现步骤:**
1、创建启动类:MainApplication
2、创建两个Bean类。Employee、User。
3、用注解@Configuration(proxyBeanMethods = true)
创建配置文件类,并用@Bena
组件注解,创建Employee、User的方法组件。
4、启动类中。两次获取容器里面的同个组件,比较地址是否为true。启动启动类验证。
- 如果
@Configuration(proxyBeanMethods = true)
获取两次Employee类的实例,判断两个实例都否相等,如果相等就是单实例。
第一步:**创建启动类:MainApplication
第二步:创建两个普通类
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的方法组件。
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
}
}