知识点:1、@Configuration(proxyBeanMethods = false)
每个@Bean
方法被调用多少次返回的组件都是新创建的。因为每次重新创建地址都不同,所以叫多实例。
2、多实例适用于没有依赖关系的场景下,因为没有依赖关系不用保持依赖类的实例是同一个实例。直接重新创建实例即可。
验证proxyBeanMethods = false
是否为多实例:
实现步骤:
1、创建启动类:MainApplication
2、创建两个Bean类。Employee、User。
3、用注解@Configuration(proxyBeanMethods = false)
创建配置文件类,并用@Bena
组件注解,创建Employee、User的方法组件。
4、启动类中。两次获取容器里面的同个组件,比较地址是否为false。启动启动类验证。
第一步:创建启动类: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 = false)
创建配置文件类,并用@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 = 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
}
}