文章目录
- 一、BeanDefinition注册
- 1.XML配置元信息
- 2.Java注解配置元信息
- @Bean
- @Component及其派生
- @import
- 3.Java API配置元信息
- 3.1.命名方式:BeanDefinitionRegistry#registerBeanDefinition(String,BeanDefinition)
- 3.2.非命名方式:BeanDefinitionReaderUtils#registerWithGeneratedName(AbstractBeanDefinition,BeanDefinitionRegistry)
- 3.3.配置类方式:AnnotatedBeanDefinitionReader#register(Class...)
- 二、外部单例对象注册
- Java API配置元信息 SingletonBeanRegistry#registerSingleton
一、BeanDefinition注册
1.XML配置元信息
2.Java注解配置元信息
@Bean
@Bean(name = {"user", "xiaomage-user"})// 多个别名
public User user() {
User user = new User();
user.setId(1L);
user.setName("小马哥");
return user;
}
@Component及其派生
@import
@import(AnnotationBeanDefinitionDemo.Config.class)
3.Java API配置元信息
3.1.命名方式:BeanDefinitionRegistry#registerBeanDefinition(String,BeanDefinition)
public static void main(String[] args) {
// 创建 BeanFactory 容器
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
// 通过 BeanDefinition 注册 API 实现
// 1.命名 Bean 的注册方式
registerUserBeanDefinition(applicationContext, "mercyblitz-user");
// 启动 Spring 应用上下文
applicationContext.refresh();
// 按照类型依赖查找
System.out.println("User 类型的所有 Beans" + applicationContext.getBeansOfType(User.class));
// 显示地关闭 Spring 应用上下文
applicationContext.close();
}
public static void registerUserBeanDefinition(BeanDefinitionRegistry registry, String beanName) {
BeanDefinitionBuilder beanDefinitionBuilder = genericBeanDefinition(User.class);
beanDefinitionBuilder
.addPropertyValue("id", 1L)
.addPropertyValue("name", "小马哥");
registry.registerBeanDefinition(beanName, beanDefinitionBuilder.getBeanDefinition());
}
3.2.非命名方式:BeanDefinitionReaderUtils#registerWithGeneratedName(AbstractBeanDefinition,BeanDefinitionRegistry)
public static void main(String[] args) {
// 创建 BeanFactory 容器
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
// 通过 BeanDefinition 注册 API 实现
// 2. 非命名 Bean 的注册方法
registerUserBeanDefinition(applicationContext);
// 启动 Spring 应用上下文
applicationContext.refresh();
// 按照类型依赖查找
System.out.println("User 类型的所有 Beans" + applicationContext.getBeansOfType(User.class));
// 显示地关闭 Spring 应用上下文
applicationContext.close();
}
public static void registerUserBeanDefinition(BeanDefinitionRegistry registry) {
BeanDefinitionBuilder beanDefinitionBuilder = genericBeanDefinition(User.class);
beanDefinitionBuilder
.addPropertyValue("id", 1L)
.addPropertyValue("name", "小马哥");
// 非命名 Bean 注册方法
BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinitionBuilder.getBeanDefinition(), registry);
}
3.3.配置类方式:AnnotatedBeanDefinitionReader#register(Class…)
public static void registerByAnnotatedBeanDefinitionReader(BeanDefinitionRegistry registry) {
AnnotatedBeanDefinitionReader annotatedBeanDefinitionReader = new AnnotatedBeanDefinitionReader(registry);
annotatedBeanDefinitionReader.register(User.class);
}
二、外部单例对象注册
Java API配置元信息 SingletonBeanRegistry#registerSingleton
// 创建 BeanFactory 容器
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
// 创建一个外部 User 对象
User user = new User();
SingletonBeanRegistry singletonBeanRegistry = applicationContext.getBeanFactory();
// 注册外部单例对象
singletonBeanRegistry.registerSingleton("user", user);
// 启动 Spring 应用上下文
applicationContext.refresh();