- Spring七大模块
- Spring Context:继承BeanFactory,提供上下文信息,扩展出JNDI、EJB、电子邮件、国际化等功能
- Spring DAO:提供了JDBC的抽象层,还提供了声明性事务管理方法
- Spring ORM:提供了JPA、JDO、Hibernate、MyBatis 等ORM映射层
- Spring AOP:集成了所有AOP功能
- Spring Web:提供了基础的 Web 开发上下文信息,与现有的Web框架提供了集成
- Spring Web MVC:提供了 Web 应用的 Model-View-Controller 模式
- Spring支持的几种bean的作用域
- singleton(单例) : bean在每个Spring ioc 容器中只有一个实例。多线程下不安全
- prototype(原型):原型模型,每次使用时创建。一个bean的定义可以有多个实例
- request:每次http请求都会创建一个bean。该作用域仅在基于web的Spring ApplicationContext情形下有效
- session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效
- global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效
- Spring框架中的单例bean是线程不安全的
- Spring依赖注入的方式:构造器注入;setter方法注入;属性注入
- @Autowired按类型装配,@Resource默认按名称装配
- ApplicationContext是BeanFactory的子接口
- BeanFactory:是Spring里面最底层的接口,包含了各种Bean的定义,管理 bean 的加载、实例化,控制 bean 的生命周期,维护 bean 之间的依赖关系
- 采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean 时(调用getBean()),才对该Bean进行加载实例化
- 手动注册
- ApplicationContext:提供在监听器中注册bean的事件;统一的资源文件访问方式;国际化;同时加载多个配置文件;载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的 web 层
- 在容器启动时,一次性创建了所有的Bean
- 自动注册
- BeanFactory:是Spring里面最底层的接口,包含了各种Bean的定义,管理 bean 的加载、实例化,控制 bean 的生命周期,维护 bean 之间的依赖关系
- 三级缓存解决Bean的循环依赖(通俗的讲就是N个Bean互相引用对方,最终形成闭环)
- 三级缓存
- 一级缓存为单例池(singletonObjects)
- 二级缓存为早期曝光对象earlySingletonObjects, 此时仅仅经过了实例化,并没有设置属性
- 三级缓存为早期曝光对象工厂(singletonFactories)
- 流程
- 当A、B两个类发生循环引用时,在A完成实例化后,就使用实例化后的对象去创建一个对象工厂,添加到三级缓存中,如果A被AOP代理,那么通过这个工厂获取到的就是A代理后的对象,如果A没有被AOP代理,那么这个工厂获取到的就是A实例化的对象
- 当A进行属性注入时,会去创建B,同时B又依赖了A,所以创建B的同时又会去调用getBean(a)来获取需要的依赖,此时的getBean(a)会从缓存中获取
- 如果要使用二级缓存解决循环依赖,意味着所有Bean在实例化后就要完成AOP代理,这样违背了Spring设计的原则,Spring在设计之初就是通过AnnotationAwareAspectJAutoProxyCreator这个后置处理器来在Bean生命周期的最后一步来完成AOP代理,而不是在实例化后就立马进行AOP代理
- 不能解决的情况:构造器注入;属性注入
- 能解决的情况:setter方法注入
- 三级缓存
- Spring 面向切面编程 AOP
- 通知类型:@Before;@After;@AfterReturning;@AfterThrowing;@Around -> ProceedingJoinPoint
- 拦截器:HandlerInterceptor;WebMvcConfigurer
- 过滤器:Filter(Servlet)
- SpringBoot:@SpringBootApplication(@ComponentScan;@EnableAutoConfiguration -> @Import)
- SpringCloud:服务注册中心(比如 Eureka Server 和 Eureka Client)
上一篇
区块链技术
2024-06-13
下一篇
Java面试-Mybatis-基础
2024-06-13