关于spring框架的核心技术之Aop
2020-06-08 04:54
99 查看
动态代理
spring框架的aop技术实现其实就是基于动态代理。
-
动态代理的含义
程序在执行过程中自动生成代理对象,通过代理对象的执行方法,使得被代理对象源代码不更改的情况下实现其功能扩展。 -
jdk动态代理
jdk内置的动态代理要求代理对象要实现接口,jdk提供了三个类,Proxy、Method、InvocationHandler用于创建代理对象,实现功能扩展。 -
cglib 动态代理
cglib是第三方类库,要求被代理类必须可以被继承,其子类就是功能增强了的代理对象,要求被代理类及其方法不能被final修饰。
AOP
Aop:面向切面编程,切面就是我们需要增加的功能,也是一种思想,是基于jdk,cglib动态代理的,是动态代理的规范化。
-
要点
1.使用时先找到被代理对象的切面,也就是除了业务之外的功能。
2.确定切面执行的时间
3.确定切面的执行位置,给谁增强功能 -
AOP的技术实现框架
使用aspectJ框架,在maven项目pom.xml中添加依赖包
1.切面执行时间常用使用以下的注解
@Before
@AfterReturning
@Around
@AfterThrowing
@After
2.切面的执行位置采用切入点表达式
以上几个注解均有属性value,属性值为切入点表示式的字符串,表示切面执行的位置
语法格式:
execution(访问权限 方法返回值 方法声明(参数) 异常类型)
3.符号
例如:
execution(public * *(…)) //指定切入点为:任意公共方法。
代码
- 接口
//接口 public interface Target { void doSome(String name,Integer age); }
- 实现类
/** - 被代理对象 */ public class TargetImpl implements Target { @Override public void doSome(String name,Integer age) { //在执行doSome方法前增加一个功能 System.out.println("targetImpl的doSome方法执行了"); } }
- 切面类
//@Aspect注解声明这个类是切面类 @Aspect public class ProxyByAspectJ { /** * 声明需要增加的功能 * 注意: * 1.这个功能需是public修饰 * 2.这个功能没有返回值 */ //Before:前置通知注解,在被代理对象方法执行之前执行 //execution(public * *.doSome(..)):任意包中的doSome方法,可以写具体切入点表示式 @Before(value="execution(public * *.doSome(..))") public void doBefore(){ System.out.println("在doSome方法之前执行这个功能"); } }
- 在xml配置文件中声明aspectj框架中的自动代理生成器标签
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd"> <!--创建被代理对象--> <bean id="target" class="com.huangliutan.TargetImpl"/> <!--创建切面类对象--> <bean id="proxy" class="com.huangliutan.ProxyByAspectJ"/> <!--声明自动生成代理生成器,在内存中改变被代理对象的结构为代理对象--> <context:aspectj-autoproxy/> </beans>
相关文章推荐
- Spring框架的核心功能之AOP技术
- spring框架(三)——Spring的核心之AOP
- 关于Java核心技术书中的代码点和代码单元是怎么理解的呢?
- 关于magic leap-magic leap 核心技术解密-谷歌到底看中了magic leap的什么
- Spring3核心技术之AOP配置
- 纠错 : 关于书籍<java核心技术 卷I 基础知识 第八版> 第五章 Employee/Manager 两个例子
- Spring 4 官方文档学习(七)核心技术之Spring AOP APIs
- 《Unity3D 实战核心技术详解》书中关于矩阵的错误
- Spring 框架的核心功能之AOP技术
- spring框架 AOP核心详解
- Spring核心技术Ioc和AOP
- 4000 关于《Java多线程编程核心技术》P113页的2.2.15内部类与同步:实验2
- ERP核心技术研讨----关于BOM表
- Spring 技术核心 IOC AOP <二> AOP详解
- 芯片软件随想录(关于核心技术)
- Spring核心技术之Ioc和AOP
- 关于spring框架中的IOC/DI和AOP,以及声明式事务管理的理解
- 关于JAVA核心技术的泛型一章
- AOP技术介绍--(.Net中关于AOP的实现)
- Creating Complete JDBC Applications 关于JDBC应用的核心技术