Spring-AOP

动态代理:
相比于静态代理,动态代理在创建代理对象上更加的灵活,
它会根据需要通过反射机制在程序运行期动态的为目标对象创建代理对象,
代理的行为可以代理多个方法,即满足生产需要的同时又达到代码通用的目的。
实现方式:
1、JDK动态代理
1、实现代理对象 需要实现 InvocationHandler 重写 invoke方法
2、程序运行期动态创建代理角色
Proxy.newProxyInstance([类加载器], [真实对象接口] ,[this(当前代理对象)] )
3、 重写 invoke方法 -----> 调用真实的方法
方法.invoke ([真实对象], [参数])
实现方法增强 。。。。
4、使用的 动态代理
1、创建真实对象
2、传入真实对象
3、获取代理角色
4、使用代理角色 去执行方法



AOP实现
1、 引用 aspectj jar
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>

AOP实现 -----> 面向切面编程

1、Spring的aop的实现原理 ------> 代理模式(动态代理) { JDK Cglib }
JDK Cglib区别?
JDK的动态代理 只能代理有接口的实现类 Cglib采用继承的思想 可以代理任何的类
2、Spring AOP 的实现
第一种: 注解式 (推荐)
第一步: 引入jar aspectj
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
第二步: 编程 aop程序 创建 LogCut class
1、 加入注解 @Aspect
2、定义好 切点 Pointcut
@Pointcut("execution (* com.shsxt.service.UserService.login(..))")
public void cut() {}
3、根据 具体的需要 配置相关的通知{ 五种通知}
i. 前置通知 (前置增强) --before() 执行方法前通知
ii.返回通知(返回增强)--afterReturn 方法正常结束返回后的通知
iii.异常抛出通知(异常抛出增强)--afetrThrow()
iv.最终通知—after 无论方法是否发生异常,均会执行该通知。
v.环绕通知—around 包围一个连接点(join point)的通知,如方法调用
注意:
1、有返回值(Object) 入参 ProceedingJoinPoint
2、程序放行 Object proceed = pjp.proceed()
3、异常上抛
4、Spring的配置文件中 开发 aop的动态代理
1、添加 aop的命名空间
xmlns:aop="http://www.springframework.org/schema/aop"
2、添加 aop 的规范
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
3、 <aop:aspectj-autoproxy />
第二种: xml配置

1、 引用 aspectj jar
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值