对于任何框架来说,实现一功能,主要分为两种方式:
- 声明式
- 代码式
在spring中通过声明式来创建Bean的方法主要有:
- xml文件
- @Component、@Service、@Controller等
- @Bean
代码的方法主要通过BeanDefinition,并将BeanDefinition注册到容器中,例如
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext=new
AnnotationConfigApplicationContext();
//定义bean
AbstractBeanDefinition beanDefinition= BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();
beanDefinition.setBeanClass(Student.class);
//注册bean
applicationContext.registerBeanDefinition("s",beanDefinition);
applicationContext.refresh(); //必须要刷新
Student student= applicationContext.getBean("s",Student.class);
System.out.println(student);
}
备注:从本质上来讲,前注解的方式,最终也是通过BeanDefinition方式来实现的。