一、 IoC 理论
IoC 全称为 Inversion of Control,翻译为 “控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入。
二、IoC方式
Spring为IoC提供了2种方式,一种是基于xml,另一种是基于注解。
- 标签来定义bean,进行管理。
- @Bean注解来定义bean,进行管理。
本次文章我们就来分析下基于注解的IoC原理,在看文章之前我们可以带一些疑问,这样有助于我们更好的理解。
- @Bean是干什么用的?
- @Controller、@Service又是干啥的?
- @CompoentScan注解是怎么起作用的?
- Spring是怎么发现@Bean、@Controller、@Service这些注解修饰的类的?
- 发现之后是怎么注册到IOC容器中的?
- IOC容器到底是个啥?
三、源码分析
首先看下段代码:
AnnotationConfigApplicationContext aac =
new AnnotationConfigApplicationContext("com.mydemo");
AnnotationConfigApplicationContext可以实现基于Java的配置类(包括各种注解)加载Spring的应用上下文。避免使用application.xml进行配置。相比XML配置,更加便捷。
3.1、类结构图
主要类或接口说明:
-
GenericApplicationContext——通用应用上下文,内部持有一个DefaultListableBeanFactory实例,这个类实现了BeanDefinitionRegistry接口,可以在它身上使用任意的bean definition读取器。典型的使用案例是:通过BeanFactoryRegistry接口注册bean definitions,然后调用refresh()方法来初始化那些带有应用上下文语义(org.springframework.context.ApplicationContextAware)的b