使用代理模式实现Spring AOP的面向切面编程,动态代理的四种增强处理

简介: 使用代理模式实现Spring AOP的面向切面编程,动态代理的四种增强处理

什么是代理类?

代理就是代替我们去执行一些额外的工作。


目标类:只有核心功能的类


比如我们在写service的时候,调用dao方法是我们的核心业务,而service类中的日志记录,事务处理,异常处理等都属于额外的功能,每个service方法中都要写一次这些额外功能也会造成大量代码的冗余,


而面向切面编程的意思就是说把这些公共的、额外的代码功能抽取出来,每个service里面只写我们的核心业务,这样就提高了我们的开发效率。


为什么代理类和目标类要实现相同的接口?

1.从代码的角度来说,代理类对象能够赋值给接口类型的变量

2.要保证代理类和目标类有相同的功能


有了代理类:

程序员可以只关心核心功能


额外功能+目标类 =代理类


以上这种说法就是叫做静态代理,

静态代理就是在代码编译时,代理类已经存在

好处:程序员可以只关心核心功能

不好:多个代理类 , 没有解决代码冗余的问题

什么是动态代理?

运行时,动态创建出来代理对象

SpringAOP通过动态代理,让程序猿只关心核心代码,同时代码不再冗余


springAOP的开发步骤:

1.写核心功能(目标类)

核心功能就是调用dao方法:

2.配置目标类

要在SpringApplication.xml文件中配置目标类所在路径

 <!--配置目标类-->
    <bean id="bookService" class="com.macw.serviceImpl.bookServiceImpl">
        <property name="bookDao" ref="bookDao"></property>
    </bean>

3.写额外功能(增强处理)

(公共功能:日志处理/事务处理/异常处理/性能分析…) 等


前置增强(MethodBeforeAdvice):在核心功能之前执行的额外功能

后置增强:在核心功能之后执行的额外功能


环绕增强:在核心功能之前以及之后执行的额外功能

异常增强:在核心功能发生异常时执行的额外功能


前置增强的配置使用:

1,声明一个类,需要实现 MethodBeforeAdvice接口:

2,spring配置文件中,配置声明的增强功能类

  <!--额外功能-->
   <bean id="myBeforeAdvice" class="com.macw.advice.myBeforeAdvice"></bean>

3,在spring配置文件中,通过aop标签做配置(需要添加aop命名空间以及schema验证文档):

.在哪些方法上面做增强处理

.在需要增强处理的方法上面,加哪个增强处理

4.让spring在运行的时候,帮我们创建代理对象()

详解advice
MethodBeforeAdvice前置增强的before方法

实现MethodBeforeAdvice接口必须要要实现before方法,这个方法有三个参数,

arg0:目标方法,

arg1:目标方法参数,

arg2:目标类,

2.AfterReturningAdvice:后置增强

3.ThrowsAdvice:异常增强

4.MethodInterceptor:环绕增强,目标方法执行之前以及之后做的增强处理

总结:

Spring AOP:Aspect Oriented Program 面向切面编程

几个重要概念:


1.切入点:需要把增强处理加在的位置;service层的方法上面;需要在配置文件中配置

2.增强处理:额外功能(公共功能) ,通知/建议(advice)

3.目标类:核心功能所在的类(原始类)

4.切面:把增强处理,放在切入点的位置,形成的一个概念

5.编织/织入:把增强处理放置在切入点的过程


AOP使用场景:

1.把功能内容抽取出来,形成advice;在配置文件中中做配置====>程序猿只关心核心功能;解决冗余

2.在原有功能基础之上,做功能扩展===>在不改变原有代码的基础上做功能扩展


AOP实现:代理模式的使用


代理类的产生原理

类加载ClassLoader

代理类的生成:由jdk动态代理生成

SpringAOP实现原理:

1.底层通过字节码技术,把目标对象以及额外功能动态封装,生成代理对象 ==>动态代理

使用了JDK动态代理以及cglib动态代理

2.为什么通过id得到的是代理对象

spring工厂创建对象之后,由BeanPostProcessor进行处理

目录
相关文章
|
1天前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
22 8
|
29天前
|
Java Spring
一键注入 Spring 成员变量,顺序编程
介绍了一款针对Spring框架开发的插件,旨在解决开发中频繁滚动查找成员变量注入位置的问题。通过一键操作(如Ctrl+1),该插件可自动在类顶部添加`@Autowired`注解及其成员变量声明,同时保持光标位置不变,有效提升开发效率和代码编写流畅度。适用于IntelliJ IDEA 2023及以上版本。
一键注入 Spring 成员变量,顺序编程
|
2月前
|
XML Java 数据安全/隐私保护
Spring Aop该如何使用
本文介绍了AOP(面向切面编程)的基本概念和术语,并通过具体业务场景演示了如何在Spring框架中使用Spring AOP。文章详细解释了切面、连接点、通知、切点等关键术语,并提供了完整的示例代码,帮助读者轻松理解和应用Spring AOP。
Spring Aop该如何使用
|
2月前
|
监控 安全 Java
什么是AOP?如何与Spring Boot一起使用?
什么是AOP?如何与Spring Boot一起使用?
76 5
|
2月前
|
Java 开发者 Spring
深入解析:Spring AOP的底层实现机制
在现代软件开发中,Spring框架的AOP(面向切面编程)功能因其能够有效分离横切关注点(如日志记录、事务管理等)而备受青睐。本文将深入探讨Spring AOP的底层原理,揭示其如何通过动态代理技术实现方法的增强。
80 8
|
2月前
|
Java 开发者 Spring
Spring AOP 底层原理技术分享
Spring AOP(面向切面编程)是Spring框架中一个强大的功能,它允许开发者在不修改业务逻辑代码的情况下,增加额外的功能,如日志记录、事务管理等。本文将深入探讨Spring AOP的底层原理,包括其核心概念、实现方式以及如何与Spring框架协同工作。
|
2月前
|
XML 监控 安全
深入调查研究Spring AOP
【11月更文挑战第15天】
50 5
|
2月前
|
Java 开发者 Spring
Spring AOP深度解析:探秘动态代理与增强逻辑
Spring框架中的AOP(Aspect-Oriented Programming,面向切面编程)功能为开发者提供了一种强大的工具,用以将横切关注点(如日志、事务管理等)与业务逻辑分离。本文将深入探讨Spring AOP的底层原理,包括动态代理机制和增强逻辑的实现。
51 4
|
2月前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
46 1
|
2月前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
48 0