-
可以直接使用@Bean注解。
-
可以使用注解@CompentScan包扫描将带有@controller @Service @Compent注解的类会扫描到IOC容器中。
-
使用@Import注解(3种用法)。
一、第一种用法
@Configuration
@Import(value = {Person.class)
public class MyConfig {
}
二、第二种方式实现ImportSelector 接口
@Configuration
@Import(value = {MySelector.class})
public class MyConfig {
}
public class MySelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
return new String[]{"com.example.zookeeper.entity.Student"};
}
}
public class Demo {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
String[] beanDefinitionNames = context.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames) {
System.out.println("BeanName:" + beanDefinitionName);
}
}
}
student的构造方法执行了
...
BeanName:myConfig
BeanName:com.example.zookeeper.entity.Student
三、第三种方式
@Configuration
@Import(value = {Person.class, MySelector.class, MyImportRegistrar.class})
public class MyConfig {
}
public class MyImportRegistrar implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
//自定义一个BeanDefinition
RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Teacher.class);
//将这个BeanDefinition注册到BeanFactory的beanDefinitionMap中
registry.registerBeanDefinition("teacher", rootBeanDefinition);
}
}
teacher的构造方法执行了...
...
BeanName:myConfig
BeanName:teacher
欢迎大家指出理解有误的地方,会及时修改,谢谢!