Spring学习笔记(一)
2019-11-21
常见应用上下文类型
AnnotationConfigApplicationContext:从一个或多个基于Java的配置中加载Spring应用上下文。
AnnotationConfigWebApplicationContext:从一个活多个基于Java的配置类中加载Spring Web应用上下文。
ClassPathXmlApplicationContext:从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源。
FileSystemXmlApplicationContext:从文件系统下的一个或多个XML配置文件中加载上下文定义。
XmlWebApplicationContext:从Web应用下的一个或多个XML配置文件中加载上下文定义。
bean的生命周期
- Spring对bean进行实例化
- Spring将value和bean的引用注入到bean对应的属性中
- 看看bean是否实现一下几个接口
- BeanNameAware:让bean知道自己在spring容器里的id
- BeanFactoryAware:让bean获取到beanFactory
- ApplicationContextAware:让bean获取到上下文
- BeanPostProcessor:Bean后置处理器,有两个方法,一个在bean初始化前调用postProcessBeforeInitialization(),一个在初始化后调用postProcessAfterInitialization,类似AOP环绕通知
- InitializingBean:要想看看bean属性赋值成功了没用可以用这个的afterPropertiesSet()方法。
- 此时,bean已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁
- 如果bean实现了DisposableBean接口,Spring将调用它的destory()接口方法,同样,如果bean使用destroy-method声明了销毁方法,该方法也会被调用
Spring 配置的可选方案
- 在XML中进行显式配置
- 在Java中进行显式配置
- 隐式的bean发现机制和自动装配
Spring 从两个角度实现自动化装配:
- 组件扫描:Spring会自动发现应用上下文中所创建的bean
- 自动装配:Spring自动满足bean之间的依赖
@ComponentScan注解 扫描并自动装配
- 默认,以配置类所在的包为基础包(base package)来扫描组件
- 扫描不同的包 括号带上包名
@ComponentScan("packageName")或者@ComponetScan(basePackages ="packageName")
- 扫描多个包
@ComponentScan(basePackages ={"packageName1","packageName2"})
- 指定基础包中包含的类或接口
@ComponentScan(basePackageClasses={CDPlayer.class,DVDPlayer.class})
@AutoWired注解 实现自动装配
- 放在属性上
- 放在构造器上
- 放在Setter方法上
- 如果没有匹配会抛出异常,可以采用
@AutoWired(required=false)