Spring AOP

JDK动态代理

代理设计模式的原理:使用一个代理将对象包装起来,然后用该代理对象取代原始对象,任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上

例:

package com.zzxtit.spring.aop;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class BankServiceProxy implements InvocationHandler{
	private Object target;//目标类

	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		for(Object arg: args) {
			System.out.println("参数:"+arg);
		}
		Object returnValue = method.invoke(target, args);//方法的执行,需要对象和参数
		System.out.println(returnValue);
		return returnValue;
	}
	
	public Object createProxy(Object target){//创建代理对象
		this.target = target;
		return Proxy.newProxyInstance(this.target.getClass().getClassLoader(), this.target.getClass().getInterfaces(), this);
		//Proxy.newProxyInstance()的参数分别为 类加载器, 类的所有接口, 和当前对象
	}
}

package com.zzxtit.spring.aop;

import java.math.BigDecimal;

public class Main {

	public static void main(String[] args) {
		BankService bs = new BankServiceImpl();//必须使用接口回调的方式
		
		BankService bsProxy = (BankService) new BankServiceProxy().createProxy(bs);//创建bs的代理对象
		
		bsProxy.transfer("张三", "李四", new BigDecimal("56213"));//在执行bsProxy.transfer()方法时,同时调用invoke()方法
		
		bsProxy.withdraw("lishi", new BigDecimal("132456"));
	}

}
关于AOP

1.AOP即面向切面编程,是一种编程模式,一种新的方法论
2.AOP的主要编程对象是切面,而切面模块化横切关注点
3.在应用AOP编程时,仍然需要定义公共功能,但可以明确地定义这个功能在哪里,以什么方式应用,且不必修改受影响的类.
4.AOP的好处:
(1)降低模块耦合度
(2)使系统容易扩展
(3)更好的代码复用性

AOP术语

切面(Aspect):一个横切关注点的模块化,这个关注点可能会横切多个对象,它是横切关注点的另一种表达方式
连接点(Joinpoint): 在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候
切入点(Pointcut):匹配连接点的断点,它通常是一个表达式,有专门的语法,用于指明在哪里(或者说在那些方法调用上)嵌入横切逻辑
通知(Advice): 再切面的某个特定的连接点上执行的动作,也就是横切逻辑, 如日志处理逻辑,事务处理逻辑
目标对象(Target Object) : 被一个或者多个切面所通知的对象,也被称作被通知对象
代理对象(Proxy Object): AOP框架创建的对象,他和目标对象遵循同样的接口,使用它的方式和使用目标对象的方式是一样的,但是它是目标对象的增强版,“通知”中的代码执行将会被代理对象的方法调用触发。在Spring中,AOP代理可以是JDK动态代理或者CHLIB代理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值