Spring spring

Spring中文网站 > Spring Authorization Serve > Spring DI的几种方式 Spring AOP连接点和切点的区别
Spring DI的几种方式 Spring AOP连接点和切点的区别
发布时间:2026/04/17 15:55:44

品牌型号:联想ThinkPad X1

系统:Windows10家庭版

软件版本:Spring 5.3.7

我们在Java后端开发的时候,Spring框架是我们用的最多的框架,它的IOC控制反转和AOP面向切面编程是Spring面试求职时绕不开的核心知识点。在刚接触Spring的时候,相信很多新手程序员不知道Spring的DI注入都有哪些方式,在这些方式中该如何取舍,在使用AOP实现日志、权限等横切逻辑的时候,连接点和切入点这两个概念经常搞不清,不少人认为两个概念差不多,基于这些情况,我们接下来将给大家梳理下Spring DI的几种方式,Spring AOP连接点和切点的区别,希望能通过这篇文章帮助大家灵活运用Spring。

一、Spring DI的几种方式

我在回答这个问题前,相信有些新手不知道什么是依赖注入,为什么需要依赖注入,要知道Spring的核心是IOC控制反转,将创建对象的权利交给了Spring容器来进行创建、管理,那么,如果在A类中我需要使用B类的对象,这个怎么办呢?像图1这样手动去new对象吗?

传统方式手动new对象
图1:传统方式手动new对象

这种方式,违背了Spring的IOC思想,将两个类死死绑在一起,如果需要更换B类,那么就必须要修改A类中的代码,耦合度太高并且不利于维护,所以这时候就有了依赖注入。

Spring的依赖注入有三种方式,一种是通过setter方法,一种是构造器注入,还有就是注解开发的时候,使用@Autowired。我们来说说setter方法,打开被依赖的类,在其中创建依赖对象的引用,然后给这个依赖对象创建一个setter方法后,在xml配置文件中使用property标签去注入依赖对象的bean。

通过setter方法依赖注入
图2:通过setter方法依赖注入

构造器注入其实跟setter注入差不多,将setter方法更改为构造器的方式去进行注入,不过,配置文件中需要使用constructor-arg标签去注入。

构造器方法依赖注入
图3:构造器方法依赖注入

如果是注解开发,那就简单多了,直接在引用上使用@Autowired注解就可以完成依赖注入了。

使用@Autowired完成依赖注入
图4:使用@Autowired完成依赖注入

二、Spring AOP连接点和切点的区别

说到Spring的AOP,我们来回忆下OOP面向对象编程,OOP是纵向对一个事物的抽象,一个对象包含静态的属性信息、动态的方法信息等,而AOP是横向的对不同事物的抽象,属性和属性、方法和方法、对象和对象都可组成一个切面,这种思维去设计编程的方式叫做AOP面向切面编程。在AOP中,有这些术语:

AOP相关术语
图5:AOP相关术语

什么是目标对象呢,大白话就是说,我要对哪个对象做增强,哪个对象就是目标对象。AOP并不是对当前目标对象本身进行增强,而是对当前目标对象的代理对象做的增强,我们在调用目标对象方法的时候,实际上调用的是代理对象的同名方法而已。连接点是什么呢,就是目标对象中可以被增强的方法,而切点是什么呢,就是目标对象中实际被增强的方法。

Spring中配置织入
图6:Spring中配置织入

所以说,连接点和切点的区别在于,连接点指的是能切的所有地方,而切点是指实际我们切的地方,例如在图6中,我们在xml中配置了织入,我们看下被增强的类,连接点应该是addUser方法和show方法,但是实际我们只增强了addUser方法,也就是说addUser方法是切点。

Spring AOP连接点和切点的区别
图7:Spring AOP连接点和切点的区别

以上就是Spring DI的几种方式,Spring AOP连接点和切点的区别的全部内容了。Spring的DI有三种方式,如果是xml开发,可以使用setter方法或者是构造器来进行DI注入,如果是注解开发,可以在引用字段上使用@Autowired注解来注入依赖。Spring AOP中连接点是指目标对象中可以被增强的地方,而切点指的是目标对象中实际被增强的地方。

读者也访问过这里:
180 1563 6924