欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring AOP、IOC -- 全网最清晰讲解

程序员文章站 2022-12-12 19:12:00
Spring AOP、IOC -- 全网最清晰讲解1. AOP1.1 什么是AOP1.2 JoinPoint(切点)1.3 Advice(通知)1.4 AOP 有哪些实现方式?1.4.1 静态代理1.4.2 动态代理2. IOC(控制反转)2.1 DI(依赖注入)2.1.1构造函数方法注入:2.1.2setter方法注入:2.1.3接口注入:1. AOP1.1 什么是AOPAOP(面向切面编程) 是OOP( 面向对象编程)的一个延伸,是建立在面向对象基础上的。方便我们将一些非核心业务逻辑抽离,从而实...

1. AOP

1.1 什么是AOP

AOP(面向切面编程) 是OOP( 面向对象编程)的一个延伸,是建立在面向对象基础上的。方便我们将一些非核心业务逻辑抽离,从而实现核心业务和非核心业务的解耦。举一个生活中的例子:

比如我们在餐桌上面吃饭,那么我们的首要任务就是吃饭,我们可以使用原始一些的吃法(用手抓),也可以使用文明一些的吃法(用筷子吃)。如果说使用OOP的方式,那么如果想要用筷子吃饭,那么每一次都要先去拿筷子,这样就造成了核心业务和非核心业务的耦合,而且每次都需要编程重复代码。所以有了AOP,有了AOP之后我们可以使用Advice(1.3中有讲解)帮我们在吃饭之前使用@Before注解来找一个人帮我们拿来筷子,这样我们就可以安心的只关注我们的核心业务逻辑–“吃饭”了,从而实现核心业务和非核心业务的解耦。

1.2 JoinPoint(切点)

切点用于准确定位,确定在什么地方应用Advice(通知)。

好比我们在吃饭的这个时间段。

1.3 Advice(通知)

Advice 相当于一个拦截器,在 JoinPoint(切点)“周围”进行一系列的拦截。

在吃饭之前找一个人帮我们拿筷子我们就使用@Before。

注解 使用时间
@Before 在 joinpoint 方法之前执行
@AfterReturning Advice 在连接点方法正常执行后执行
@AfterThrowing Advice 在方法通过抛出异常退出并使用
@After Advice 在连接点方法之后执行
@Around 在连接点之前和之后执行

1.4 AOP 有哪些实现方式?

1.4.1 静态代理

优点:可以在被代理方法的执行前或后插入其他代码,比如事务、日志等。
缺点:如果被代理方法很多,就要为每个方法进行代理,增加了代码维护的成本。

1.4.2 动态代理

  • JDK 动态代理(基于接口)

JDK代理类必须要有实现的接口,如没有接口则无法使用JDK动态代理。

  • CGLIB 动态代理(基于类)

CGLib动态代理是一个第三方实现的动态代理类库,要使用CGLib必须要引入第三方类库,实现其MethodInterceptor接口。

2. IOC(控制反转)

IOC是“控制反转”,不是什么技术,而是一种设计思想,从字面上来理解就是,将控制权进行反转。就是从原本的程序员管理对象反转为由Spring进行对象的管理和创建。帮助我们自动管理依赖的对象,从而实现了层与层之间的解耦,所以IOC的重点也是解耦!

2.1 DI(依赖注入)

DI(依赖注入)是IOC(控制反转)的实现方式。

2.1.1构造函数方法注入:

由于同一个对象是不能被同时被构造两次的,所以被注入的对象的整个生命周期,都应该是由IOC进行管理的。

2.1.2setter方法注入:

setter注入比构造器方法注入更加的灵活,因为可以在构造对象之后在进行注入,随意性比较强。

比如我们在Server层访问Dao层的时候,使用@Autowired和@Resource,这两种也属于setter的方法注入。

//实例
@Resource
public AuthorServer authorServer01;

@Autowired
public AuthorServer authorServer02;

2.1.3接口注入:

没啥用,喜欢的话可以自行百度。

本文地址:https://blog.csdn.net/xiaozhezhe0470/article/details/110183686