实现ImportBeanDefinitionRegistrar
package com.qing.config;
import com.qing.bean.Cat;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;
public class MyDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
//metadata 元数据的用法同动态加载bean
BeanDefinition beanDefinition= BeanDefinitionBuilder.
rootBeanDefinition(Cat.class).
getBeanDefinition();
//beanDefinition可以设置单例啥的
registry.registerBeanDefinition("cat",beanDefinition);
}
}
元数据metadata 是下面的config7
package com.qing.config;
import org.springframework.context.annotation.Import;
@Import(MyDefinitionRegistrar.class)
public class SpringConfig7 {
}
测试
package com.qing.app;
import com.qing.config.SpringConfig7;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class App7 {
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig7.class);
String[] names = ctx.getBeanDefinitionNames();
for (String name : names) {
System.out.println("bean的名字:" + name);
}
}
}
结果
总结