BeanFactory
BeanFactory:ApplicationContext的父接口
DefaultListableBeanFactory:BeanFactory的默认实现类
DefaultSingletonBeanRegistry:DefaultListableBeanFactory的父类,默认注册单例bean的类
ApplicationContext
ApplicationContext:BeanFactory的子接口,组合了BeanFactory
MessageSource:ApplicationContext的父接口,提供国际化能力
ReloadableResourceBundleMessageSource:MessageSource的默认实现类,支持消息的动态刷新(当资源文件发生更改时,无需重启应用)
ResourcePatternResolver:ApplicationContext的父接口,提供获取资源文件能力
EnvironmentCapable:ApplicationContext的父接口,提供获取环境配置信息能力
ApplicationEventPublisher:ApplicationContext的父接口,提供发布事件能力
ClassPathXmlApplicationContext:ApplicationContext接口的实现类,从类路径中加载XML配置文件,并创建一个Spring应用上下文
FileSystemXmlApplicationContext:ApplicationContext接口的实现类,从磁盘中加载 XML配置文件,并创建一个Spring应用上下文
AnnotationConfigApplicationContext:ApplicationContext接口的实现类,通过Java配置类创建一个 Spring 应用上下文
AnnotationConfigServletWebServerApplicationContext:ApplicationContext接口的实现类,在Servlet环境中使用Java配置类创建一个Spring应用上下文,并提供Web服务器功能
作用域
singleton(默认):单例模式,相同名称的bean在spring ioc容器中只有一个
prototype:原型模式,spring容器每次都会创建一个新的bean
request:每次HTTP请求都会创建一个新的bean,并且只在该HTTP请求内有效
session:每个HTTP Session中拥有一个bean的实例
依赖注入方式
构造器注入:使用构造函数注入
Setter注入:使用setter方法来注入
字段注入:使用@Autowired和@Resource
后处理器
ConfigurationClassPostProcessor:处理@Configuration/@Bean/@ComponentScan/@Import
BeanFactoryPostProcessor:ConfigurationClassPostProcessor的父接口
AutowiredAnnotationBeanPostProcessor:处理@Autowired,默认优先级比CommonAnnotationBeanPostProcessor高
CommonAnnotationBeanPostProcessor:处理Java EE标准注解(@Resource/@PostConstruct/@PreDestroy)
BeanPostProcessor:AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor的父接口
事务失效场景
1:非public方法
2:非事务方法自调用(self-invocation)内部事务方法
解决方法:
1:注入自身获取代理对象进行调用
2:外部调用事务方法
3:异常被捕捉
4:抛出的异常类型未在@Transactional中声明,默认只回滚RuntimeException
5:事务传播行为设置不当,如NOT_SUPPORTED/NEVER/REQUIRES_NEW