spring 概览
spring概览…….
内容未全部完成
spring-核心容器
其实主要就是ioc
spring-core
故名思意,核心模块.. 定义了资源访问模式。(resource)
spring-bean
故名思意,主要解决关于bean的问题:
- bean定义
- bean的解析
- bean的创建
- 典型的工厂模式,其顶级接口:
BeanFactory
spring-context
spring中上下文,bean运行时环境,保存各个对象状态。
还提供了其他高级特性,比如事件发布、国际化信息支持等
aop
aop
springboot的aop都是 cglib….
aspects
支持与Aspectj集成
instrumentation
没用过…..
数据访问
jdbc
orm
oxm
transaction
web
webmvc
webflux
websocket
spring的设计模式
目前接触
- 单例(bean默认为单例)
- 代理(aop)
- 模板(jdbcTemplate)
- 控制器(dispatcher)
- 工厂(beanfactory)
spring的事件
- refresh事件(ContextRefreshdEvent),在
ConfigurableApplicationContext
的refersh()
方法被调用时触发 - start事件,容器调用
ConfigurableApplicationContext
的start()
方法被调用时触发 - stope事件,容器调用
ConfigurableApplicationContext
的stop()
方法被调用时触发 - close事件,ApplicationContext被关闭时触发。所有bean被销毁
- web请求事件,一个httpRequest结束触发。
关于bean
bean的类型
- singleton-单例,默认
- prototype-每次请求,一个
- request-http请求,一个,仅当前http请求有效
- session,一个session,一个,仅在当前http-session有效
- application,每个webapplication一个。
bean的生命周期
实例化
xml,注解或者configuration提供bean的初始化
注入aware相关属性
- BeanNameAware,工厂会通过传递bean的beanName调用
setBeanName(String name)
方法 - BeanFactoryAware,工厂传递自身实例调用
setBeanFactory(BeanFactory beanfactory)
调用相应初始化后的方法
- 如果存在与该bean相关联的
BeanPostProcessor
,则调用preProcessBeforeInitialization(Object bean, String beanName)
InitializingBean
调用其afterPropertieSet()
方法。- 如果xml中指定
init-method
方法,调用该方法。 - 如果存在与该bean相关联的
BeanPostProcessor
,则调用postProcessAfterInitialization(Object bean, String beanName)
bean的销毁
非单例的,交给客户端。
单例托管给spring-ioc
如果实现了
disposableBean
接口,spring容器关闭时,调用#destroy()
方法。如果xml指定destroy方法,则调用该方法。
spring注解
bean注解
- @Component
- @Service(其实和component一样,不会提供其他特殊功能, 🙂)
- @Controller
- @RestController
- @Required,应用于bean的setter方法。emm,没用过,- -!
- @Autowired
- @Qualifier 当你创建多个相同类型的 Bean ,并希望仅使用属性装配其中一个 Bean 时,您可以使用
@Qualifier
注解和@Autowired
通过指定 ID 应该装配哪个确切的 Bean 来消除歧义。
spring事务
- 注意:spring中,在开启的service事务中,无法切换数据源。在spring的事务管理中,所使用的数据库链接和当前线程绑定。
事务隔离级别
1 | // TransactionDefinition.java |
事务传播(七类)
1 | // TransactionDefinition.java |