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级生命周期,是属于容器级生命周期接口方法。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值