Spring之BeanDefinition

BeanDefinition

BeanDefinition表示Bean定义,BeanDefinition中存在很多属性用来描述一个Bean的特点。
比如:

 - class,表示Bean类型 
 - scope,表示Bean作用域,单例或原型等 
 - lazyInit:表示Bean是否是懒加载
 - initMethodName:表示Bean初始化时要执行的方法 
 - destroyMethodName:表示Bean销毁时要执行的方法

在Spring中,我们经常会通过以下几种方式来定义Bean:

 1. xml中<bean/>
 2. @Bean
 3. @Component(@Service,@Controller)

这些,我们可以称之申明式定义Bean。

我们还可以编程式定义Bean,那就是直接通过BeanDefinition,比如:

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

// 生成一个BeanDefinition对象,并设置beanClass为User.class,并注册到ApplicationContext中

AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();
beanDefinition.setBeanClass(User.class);
context.registerBeanDefinition("user", beanDefinition);
System.out.println(context.getBean("user"));

我们还可以通过BeanDefinition设置一个Bean的其他属性

beanDefinition.setScope("prototype"); // 设置作用域
beanDefinition.setInitMethodName("init"); // 设置初始化方法
beanDefinition.setLazyInit(true); // 设置懒加载

和申明式事务、编程式事务类似,通过,@Bean,@Component等申明式方式所定义的Bean,最终都会被Spring解析为对应的BeanDefinition对象,并放入Spring容器中。

相关推荐

  1. SpringBeanDefinition

    2024-01-19 06:32:07       53 阅读
  2. SpringBoot 基础概念:注册BeanDefinition

    2024-01-19 06:32:07       71 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-19 06:32:07       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-19 06:32:07       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-19 06:32:07       87 阅读
  4. Python语言-面向对象

    2024-01-19 06:32:07       96 阅读

热门阅读

  1. kafka消费者

    2024-01-19 06:32:07       53 阅读
  2. 5G基站 储能发展新方向

    2024-01-19 06:32:07       53 阅读
  3. 14.云原生之三高系统

    2024-01-19 06:32:07       55 阅读
  4. vue中改变v-html中包含body标签的样式修改方法

    2024-01-19 06:32:07       54 阅读
  5. 关于git

    2024-01-19 06:32:07       41 阅读