学习的目的:
- 深入理解spring的底层,设计思想
- 学习spring这种设计思想,模式
Spring 中文文档: https://github.com/DocsHome/spring-docs/blob/master/pages/core/overview.md
sprig的核心
IOC
AOP
区分BeanFactory与ApplicationContext
Feature | BeanFactory | ApplicationContext |
---|---|---|
Bean Bean实例化/装配 | Yes | Yes |
集成的生命周期管理 | No | Yes |
自动注册 BeanPostProcessor | No | Yes |
自动注册 BeanFactoryPostProcessor | No | Yes |
便利的 MessageSource 访问 (国际化) | No | Yes |
内置ApplicationEvent 发布机制 | No | Yes |
BeanFactory 仅仅是创建bean
ApplicationContext集成了很多扩展点
扩展点:
- BeanFactoryPostProcessor ```java @Component public class MyBeanPostProcessor implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
BeanDefinition beanName = beanFactory.getBeanDefinition("beanName");
// 修改 bean的 bean Definition
}
}
2. BeanDefinitionRegistryPostProcessor
```java
public class MyBeanDefinitionRegistry implements BeanDefinitionRegistryPostProcessor {
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
registry.registerBeanDefinition("bean",null;);
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
beanFactory.addBeanPostProcessor(null);
}
}
- **BeanPostProcessor 比较重要
前后9次用到
通过该bean 扩展 完成aop,
**
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return null;
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return null;
}
}