知识点:**
1、@Configuration
默认为单实例。
- 如果`@Configuration(proxyBeanMethods = true)`代理对象调用方法。SpringBoot总会检查在容器中是否有这个组件。
- 获取两次Employee类的实例,判断两个实例都否相等,如果相等就是单实例。
2、 获取容器里所有的组件:String[] names = run.getBeanDefinitionNames()
3、从容器中获取组件:Employee employee1 = run.getBean("getEmployee", Employee.class);
单实例适用于有依赖关系的场景下,因为有依赖关系要保持依赖类的实例是同一个实例。
- 验证默认为单实例:
实现步骤:
1、创建启动类:MainApplication
2、创建两个Bean类。Employee、User。
3、用注解@Configuration
创建配置文件类,并用@Bena
组件注解,创建Employee、User的方法组件。
4、启动类中。两次获取容器里面的同个组件,比较地址是否为true。启动启动类验证。
第一步:创建启动类: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
创建配置文件类,并用@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//配置文件类
public class MyConfig {
@Bean //给容器添加组件
public Employee getEmployee(){
return new Employee("工程部",05);
}
@Bean
public User getUser(){
return new User("张三",25);
}
}
第四步:通过启动类MyController 测试
获取两次Employee类的实例,判断两个实例都否相等,如果相等就是单实例。
结果为:true。
package com.wzy.boot;
/*@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
}
}