知识点:
1、@Import注解:
- 用于配置文件类 MyConfig。
- 底层是一个数组。
- 作用:可以创建导入单个或多个类的组件,例如:`@Import``({User.``class``, Employee.``class``})`。
每个组件默认的名称就是类名称,或者配置类中的方法名。
2、getBeanNamesForType()
方法:
String[] employeeBean = run.getBeanNamesForType(Employee.class);
当同类型的Bean有多个时,可以获取全部同类型的Bean实例,返回一个String[]数组。数组保存的是:类的实例。
@Import注解源码:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import {
/**
* {@link Configuration @Configuration}, {@link ImportSelector},
* {@link ImportBeanDefinitionRegistrar}, or regular component classes to import.
*/
Class<?>[] value();
}
使用步骤:
1、创建启动类:MainApplication
2、创建两个Bean类。Employee、User。
3、用注解@Configuration(proxyBeanMethods = true)
与 @Bean
增加创建配置类MyConfig2。加入注解@Import({User.class, Employee.class})
4、启动类中。两次获取容器里面的同个组件,比较地址是否为true。启动启动类验证。
第一步:创建启动类:MainApplication
第二步:创建两个普通类
package com.wzy.boot.bean;
public class Employee {
private String employeeName;
private Integer employeeId;
//有参与无参构造方法
//gettet与setter方法
}
package com.wzy.boot.bean;
public class Employee {
private String employeeName;
private Integer employeeId;
//有参与无参构造方法
//gettet与setter方法
}
第三步:@Configuration(proxyBeanMethods = true)
与 @Bean
增加创建配置类MyConfig2。加入注解@Import({User.class, Employee.class})
MyConfig类:**
package com.wzy.boot.config;
@Configuration(proxyBeanMethods = true)//配置文件类,为单实例
public class MyConfig {
@Bean //给容器添加组件
public Employee getEmployee(){
return new Employee("工程部",05);
}
@Bean
public User getUser(){
return new User("张三",25);
}
}
MyConfig2类:
package com.wzy.boot.config;
@Import({User.class, Employee.class})//自动创建User与Employee组件
@Configuration
public class MyConfig2 {
}
第四步:通过启动类MyController 测试
获取MyConfig类与MyConfig2类中的,User与Employee组件。
package com.wzy.boot;
/*@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.wzy.controller")*/
@SpringBootApplication(scanBasePackages = "com.wzy.boot")//这是一个SpringBoot应用
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);
}
//获取所有的User组件
String[] userBean = run.getBeanNamesForType(User.class);
for (String s : userBean) {
System.out.println(s);
}
//获取所有的Employee组件
String[] employeeBean = run.getBeanNamesForType(Employee.class);
for (String s : employeeBean) {
System.out.println(s);
}
}
}
结果: