Spring相关

spring依赖注入有几种方式

  1. setter方法注入(常用);
  2. 构造器注入(常用);
  3. 静态工厂的方法注入(常用);
  4. 实例工厂的方法注入

spring的Bean的生命周期

  1. 单例:
    出生:当容器创建时对象出生。
    活着:只要容器还在,对象一直活着
    死亡:容器销毁,对象死亡。
    单例对象的生命周期和容器相同。

  2. 多例:
    出生:当我们使用对象时spring框架为我们创建。
    活着:对象只要是在使用过程中就一直活着。
    死亡:当对象长时间不用,且没有别的对象引用时,由java垃圾回收期回收。

spring涉及到的设计模式

  1. 代理模式:在AOP和remoting中被用的比较多。
  2. 单例模式:在spring配置文件中定义的bean默认为单例模式。
  3. 工厂模式:BeanFactory用来创建对象的实例。
  4. 模板方法:用来解决代码重复的问题,比如RestTemplate,JmsTemplate,JpaTemplate。

什么时候用到了spring的事务

需要对表进行更新操作,或者进行多表操作时,期间可能出现错误,这个时候就要使用事务进行控制,如果出现错误则直接进行回滚。

什么是IOC

IOC就是控制反转的意思,以前我们创建对象的时候,直接在类中new一个对象,现在我们把这个new对象的动作交给了IOC容器来做,这个new对象的控制权由类交给了IOC去控制,就叫做控制反转。

IOC实现原理

BeanFactory定义了IOC容器的基本功能,里面维护了一个HashMap的结构容器,其有两个重要的实现类,一个是基于xml的一个是基于注解的。当创建好容器之后会根据我们的配置去使用xml或者是注解的容器对象去解析xml或者扫描包,目的都是为了拿到类的全限定类名,拿到全限定类名之后会通过反射创建实例对象,并存入到map容器中,通过id唯一标识作为map的key,实例对象作为map的value。然后我们通过key就可以拿到实例对象来使用了。

AOP实现原理

  • Spring AOP采用的是动态代理技术实现,在程序运行期间在不改变业务方法的基础上进行增强,并且不会生成新的类。对于动态代理技术,Spring AOP提供了JDK动态代理的支持以及CGLib的支持。
  • JDK动态代理只能为接口创建动态代理实例,而不能对类创建动态代理。需要获得被代理类的接口信息(应用java的反射技术),动态生成一个实现了代理接口的动态代理类(字节码),再通过反射机制获得动态代理的构造函数,利用构造函数生成动态代理的实例对象,在调用具体方法前调用invoke方法来处理增强逻辑。
  • CGLib动态代理是为了弥补JDK代理不能代理类的缺陷,使用CGLib代理需要导入第三方的依赖asm包,把被代理对象类的class文件加载进来,修改其字节码生成子类。注意,被final修饰的类不能被代理,被final修饰的方法不能被增强。

Spring通知有哪些类型

  • 前置通知(Before advice):在某连接点(join point)之前执行的通知,但这个通知不能阻止连接点前的执行(除非它抛出一个异常)。
  • 返回后通知(After returning advice):在某连接点(join point)正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。
  • 抛出异常后通知(After throwing advice):在方法抛出异常退出时执行的通知。
  • 后通知(After/Finally advice):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
  • 环绕通知(Arround advice):包围一个连接点(join point)的通知,如方法调用。这是最强大的一种通知类型。环绕通知可以在方法调用前后完成自定义的行为。它有会选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值