spring(二)
spring知识点复习
文章目录
spring介绍
Spring是一个轻量级的IOC和AOP容器的开源框架,Spring是低侵入的方式来管理应用中的代码。
- 轻量级和重量级:轻量级是相对于重量级而言的,轻量级一般就是非入侵性的、所依赖的东西非常少、资源占用非常少、部署简单等等,而重量级正好相反。
- 非侵入式设计:无需继承框架提供的任何类,这样我们在更换框架时,之前写过的代码几乎可以继续使用。
IOC
IOC介绍
IOC(Inversion of Control),即是控制反转。
即是:对对象的创建和管理,由程序员转变为框架。(不用程序员new了,交由框架处理,并且对象直接的关系也交由框架处理)
IOC核心容器
IOC容器有两个核心接口.分别为BeanFactory和ApplicationContext。
BeanFactory接口
BeanFactory由org.springframework.beans.facytory.BeanFactory接口定义,是基础类型的IoC容器,它提供了完整的IoC服务支持。BeanFactory就是一个管理Bean的工厂,它主要负责初始化各种Bean,并调用它们的生命周期方法。
XmlBeanFactory类
XmlBeanFactory类,BeanFactory接口的一个实现类,通过XML文件获取beans。
BeanFactory beanFactory = new XmlBeanFactory(new FileSystemResource("/resource/applicationcontext.xml"));
ApplicationContext接口
ApplicationContext是BeanFactory的子接口,也被称为应用上下文。一个最常用的容器接口。它由org.springframework.context. ApplicationContext接口定义。ApplicationContext包含BeanFactory的所有功能,还添加了对国际化、资源访问、事件传播等等方面的支持。
ApplicationContext接口的常用实现类:
- ClassPathXmlApplicationContext
- FileSystemXmlApplicationContext
- AnnotationConfigApplicationContext
ClassPathXmlApplicationContext类
ClassPathXmlApplicationContext,ApplicationContext的一个实现类,ClassPathXmlApplicationContext会从类路径classPath中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作。
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext(String configLocation);
FileSystemXmlApplicationContext类
FileSystemXmlApplicationContext会从指定的文件系统路径(绝对路径)中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作。
ApplicationContext applicationContext =
new FileSystemXmlApplicationContext(String configLocation);
AnnotationConfigApplicationContext类
用于使用注解+配置类的方式代替xml配置文件时。与配置类有关的注解@Configuration和@Bean
ApplicationContext applicationContext =
new AnnotationConfigApplicationContext(Class<?>... annotatedClasses);
接口BeanFactory和ApplicationContext的区别
- AplicationContext在构建核心容器时,创建对象采用的是立即加载的方式,即配置文件一读取完,立马创建对象
- BeanFactory在构建核心容器时,创建对象采用的是延迟加载方式,即什么时候通过Id获取对象才进行创建(懒加载)
ID(依赖注入)
ID介绍
依赖关系的管理交给spring维护,在当前类需要用到其他类的对象,由spring为我们提供,只需在配置文件中说明关系的维护。ID是对对象中的成员进行赋值的过程,而对象之间的关系由spring帮我们管理。
ID注入的方式
- setter注入
- 参构造器注入
- 名称空间注入(本质为setter)
- 注解方式注入
注入方式的实现(博文):https://blog.csdn.net/qq_43203949/article/details/118532287
配置类(自定义对象创建)
不使用xml写bean,改成使用java代码,使用@Configuration声明一个类是配置类,通过该类生成我们需要的bean。
@Configuration //定义是spring的bean配置类
@ComponentScan("com.ex.test") //扫描包
@Import(other.class) //导入其他config类
public class beanconfig{
@Bean
public User user(){return new User();}
}
bean的作用范围
- singleton 单例,通过spring容器获得该bean时总是返回唯一的实例
- prototype表示每次获得bean都会生成一个新的对象
- request表示在一次http请求内有效
- session表示在一个用户会话内有效
- globalSession表示在全局会话内有效
A0P
AOP核心概念
1、横切关注点:对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点
2、切面(aspect): 类是对物体特征的抽象,切面就是对横切关注点的抽象
3、连接点(joinpoint):被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器
4、切入点(pointcut): 对连接点进行拦截的定义
5、通知(advice): 所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类
6、目标对象 :代理的目标对象
7、织入(weave):将切面应用到目标对象并导致代理对象创建的过程
8、引入(introduction): 在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段
AOP注解
- 开启AOP注解模式
- @EnableAspectJAutoProxy
- 指定切面类
- @Aspect
- 切入点
- @PointCut
- 通知方法
- 前置通知(@Before)
- 后置通知(@After)
- 返回通知 (@AfterReturning)
- 异常通知 (@AfterThrowing)
- 环绕通知 (@Around)
Bean的生命周期
主要步骤:
- 对象创建
- 属性填充
- 初始化
- 销毁
接口等级
1、Bean自身的方法 : 这个包括了Bean本身调用的方法和通过配置文件中的init-method和destroy-method指定的方法
2、Bean级生命周期接口方法 : 这个包括了BeanNameAware、BeanFactoryAware、InitializingBean和DiposableBean这些接口的方法
3、容器级生命周期接口方法 : 这个包括了InstantiationAwareBeanPostProcessor 和 BeanPostProcessor 这两个接口实现,一般称它们的实现类为“后处理器”。
4、工厂后处理器接口方法 : 这个包括了AspectJWeavingEnabler, ConfigurationClassPostProcessor, CustomAutowireConfigurer等等非常有用的工厂后处理器 接口的方法。工厂后处理器也是容器级的。在应用上下文装配配置文件之后立即调用。
https://www.cnblogs.com/zrtqsk/p/3735273.html
时序图详细步骤:
看下面时序图, 主要看Bean这条线,Bean这条线才代表Bean级生命周期 ,虽然InstantiationAwareBeanPostProcessor 和 BeanPostProcessor 这两个接口的方法会在每个Bean初始化时会执行,当时不属于Bean级生命周期,是属于容器级生命周期接口方法。
35273.html
时序图详细步骤:
看下面时序图, 主要看Bean这条线,Bean这条线才代表Bean级生命周期 ,虽然InstantiationAwareBeanPostProcessor 和 BeanPostProcessor 这两个接口的方法会在每个Bean初始化时会执行,当时不属于Bean级生命周期,是属于容器级生命周期接口方法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)