spring初识
在阅读一些框架源码时发现很多关于spring很有意思的使用方式,希望能系统的了解下spring的功能,我大体想了解以下几点:
- bean的生命周期管理和bean容器
- aop切面
bean容器
- beanFactory,容器的简单实现,其他容器的基础;
- 上下文容器,如ApplicationContext。
1. 上下文容器
- AnnotationConfigApplicationContext java配置类
- AnnotationConfigWebApplicationContext java配置类加载Springweb
- ClassPathXmlApplicationContext 类路径下XML配置
- FileSystemApplicationContext 文件系统XMlpei
- XmlWebApplicationContext 从web获取XMl配置
2. bean生命周期
bean生命周期是由beanFactory要求实现的初始化工厂需要的方法及顺序。
BeanFactory注释
Bean factory实现应该尽可能支持标准bean生命周期接口,完整的初始化方法及其标准顺序是:
BeanNameAware.setBeanName
BeanClassLoaderAware.setBeanClassLoader
BeanFactoryAware.setBeanFactory
EnvironmentAware.setEnvironment
- EmbeddedValueResolverAware.setEmbeddedValueResolver
- ResourceLoaderAware.setResourceLoader
only applicable when running in an application context)
- ResourceLoaderAware.setResourceLoader
- ApplicationEventPublisherAware.setApplicationEventPublisher
only applicable when running in an application context)
- ApplicationEventPublisherAware.setApplicationEventPublisher
- MessageSourceAware.setMessageSource
//only applicable when running in an application context)
- MessageSourceAware.setMessageSource
-
ApplicationContextAware.setApplicationContext
only applicable when running in an application context)
-
- ServletContextAware.setServletContext
only applicable when running in a web application context)
- ServletContextAware.setServletContext
BeanPostProcessors.postProcessBeforeInitialization
InitializingBean.afterPropertiesSet
a custom init-method definition
BeanPostProcessors.postProcessAfterInitialization
bean关闭时会调用的方法:
DestructionAwareBeanPostProcessors.postProcessBeforeDestruction
DisposableBean.destroy
a custom destroy-method definition
3. 上下文配置方案
- XML
- java类
- 隐式发现机制,自动装配
2.装配Bean
1.自动化装配
标注Bean的注解:
- @Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。
- @Named Component 替代方案
- @Service 通常作用在业务层,但是目前该功能与 @Component 相同。
- @Constroller 通常作用在控制层,但是目前该功能与 @Component 相同。
- @Repository 通常作用在DAO层,但是目前该功能与 @Component 相同。
标注Bean扫描路径方式:
- @ComponentScan 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。
- <context:component-scan base-package = "net.xxx"/>
注入方式:
- @Resource 默认通过按照名称byName自动注入,也可通过type或name属性指定。
- @Autowired 按照类型(byType)装配依赖对象
- @Inject 同@Autowired
2.第三方jar包类配置Bean
- 配置类
@Configuration 表明该类是配置类
@Bean 表明该方法返回值需要注册为bean,方法名是生成的bean名称
带有注解的方法多次调用时返回值是单例。
@Bean
private A a(){,例如b,c方法中a()返回值是一样的。
return new A();
}
@Bean
private B b(){
return new B(a());
}
@Bean
private C c(){
return new C(a());
}
- XML配置
略
- XML配置