文章目录
官网地址
1.1ApplicationContext与BeanFactory区别
- Easier integration with Spring’s AOP features(支持AOP集成)
- Message resource handling (for use in internationalization)(i18n,国际化)
- Event publication(事件监听)
- Application-layer specific contexts such as the WebApplicationContext for use in web applications. (应用层特定上下层,这个我也不知道是神马)
后面会详细说下
下文AC是ApplicationContext简写
1.2容器概述
AC(缩写)有我们常见的ClassPathAC,获取xml内容
配置元数据
so many 注解~
@Configuration
- @Import引入某个类
- @Bean DI描述类创建过程
- @Value 获取配置的值
@CompontScan
注解需要被Spring所发现,所以需要加上扫描类,早期的Spring项目经常看到这个注解,
后来使用SpringBoot的时候被@SpringBootApplication代替
特色注解
@Enable XXX注解
我们在项目里面经常看到,这里就不介绍了
@Bean
在Spring中我们把Bean创建交给了容器,这个过程@Bean就是告诉容器我们这个类是
如何创建的,其中包括依赖注入。
从上面图片中可以看到,如果没有写明类的id,默认以开头小写驼峰命名的方法来
表示这个类,而这个类id会指向到相应的实例。
为啥有所谓的类命名?
等下看下1.3.1节类命名:容器将为该bean生成一个唯一的名称,从而创建出唯一的类,
不然相当混乱的不是吗?
@Autowired,@Resource
@Auto+@Qualifier=@Resource
区别:
@Auto:按照类型去注入,默认是require=true;出现多个实现类,则会启动失败
@Resource:按照名称去注入,如果失败会降级为按照类型去注入
@Qualifier:约束注入的名称
1.3.1类命名
类请求初始化之后的第一步,给个名~
在Spring bean生命周期里面这是第一步!
1.3.2实例化
编程实例化
- 构造方法
- 静态工厂
- 实例方法工厂
1.4.1 依赖关系
DI:是一个过程,告诉容器创建bean步骤,解耦通过new 构造方法创建bean的步骤。
出现的问题:循环依赖,鸡&蛋的关系
1.6.1初始化回调
这个在bean复制属性之后,初始化进行相关回调。
1.6.2获取上下文
通过实现ApplicationContextAware来setAC,获取上下文的相关配置等等
1.10节
@Component
丢出来给Spring容器发现,其中持久层是需要@Repository注解的,像我们项目一些mapper没有添加,使用@Auto注入会报警告(正常可以运行的),是由于这个类还是需要扔出来给spring去发现的。
@Service
这个跟@Controller都是@Component的细分
1.10.2 国际化
MessageSource,多语言就是靠这个去实现,感兴趣自己去看看。
1.11 节
JSR330标准以及@Inject,它的效果跟@Auto的一样
1.15节
1.15.1 MessageSource i18n国际化支持,也是AC特有
1.15.2监听器 @EvenListen监听类创建执行相关逻辑,也是AC特有