spring初学day02

听说坚持一件事后果很严重,鄙人不信邪,表示要试试。😃 此博文仅为学习笔记,每天记录。防止错误观念传播,萌新谨慎观看 :)

spring第一天内容

spring第二天

spring核心功能之二

二、Aop(面向切面编程)

动态代理

功能:在不改变原有代码的情况下,为程序增加功能。
分类:JDK动态代理:对象必须要实现接口,主要通过Proxy、Method\InvocationHandler 实现
CGLIB动态代理:对象要求比较宽松,第三方的工具库。创建代理对象,原理是继承,通过继承目标类,创建子类。子类就是代理对象,要求目标类不能是final的
实现步骤:
    		1、需要一个目标类(对该类进行增强)
    		2、创建IncocationHandler接口的实现类,在该实现类给目标方法进行增强。
    		3、使用JDK中Proxy创建代理对象。
    				创建目标对象

·

//接口
public interface StudentService {

	void doHomeWork();
	void doSomeThint();
}
//实现类
public class StudentServiceImpl implements StudentService{

	@Override
	public void doHomeWork() {
		System.out.println("doHomeWork");
		
	}

	@Override
	public void doSomeThint() {
		System.out.println("doSomeThint");
	}

}


//需要插入的功能类
public class StudentTools {
	public static void doLog() {
		System.out.println("log");
	}
	
	public static void doDate() {
		System.out.println("doDate"+new Data());
	}
}

`
创建InvocationHandler对象

public class TestInvocationHandler implements InvocationHandler {
	private Object target;

	public TestInvocationHandler(Object target) {
		this.target = target;
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		//通过代理方法执行时,会调用invoke方法
		 Object res=null;
		StudentTools.doLog();
		//执行目标类的方法,通过method实现
		res=method.invoke(target, args);
		StudentTools.doDate();
		
		return res;
	}
	
}
    	创建代理,		通过代理执行方法			
public class TProxy {
	public static void main(String[] args) {
		//使用JDK的Proxy创建代理对象
		StudentService targetService=new StudentServiceImpl();
		//创建InvocationHandler对象
		InvocationHandler handler=new TestInvocationHandler(targetService);
		//使用proxy创建代理
		StudentService proService=(StudentService) Proxy.newProxyInstance(targetService.getClass().getClassLoader(), targetService.getClass().getInterfaces(), handler);
		
		//通过代理执行方法,调用handler中的invocake()
		proService.doHomeWork();
		
	}
}

·

作用

1、在目标类源代码不动的情况下,增加功能
2、减少代码的重复
3、专注业务逻辑代码
4、解耦合,让业务功能与非业务功能分开。

Aop(面向切面编程 Aspect Orient programming)

基于动态代理,可以使用JKD跟CGLIB两种方式。AOP就是动态代理的规范化,把动态代理的实现步骤,方式都定义好了。让开发人员用一种统一的方式使用动态代理。
Aspect:切面 给你的业务类增加功能就是切面,上面的doLog(),doDate()都是切面。切面的特点:一般都是非业务方法,可以独立使用。
理解面向切面编程:

OOP:面向对象编程:用对象构建项目
AOP:1、在分析项目时找出切面
2、找出切面使用时间
3、合理的安排切面执行的位置

术语:

1、Aspect 切面 表示增强的功能(常用的功能:日志、事务、权限验证、参数检查)
2、JoinPoint 连接点 某个类中的业务方法
3、PointCut 切入点 多个连接点方法的集合
4、目标对象 给哪个类增强功能,该类就是目标对象
5、Advice 通知 通知表示切面的执行时间

切面的三个要素

1、切面的功能代码,切面要干什么
2、切面的执行位置,PointCut切面的位置
3、切面的执行时间,Advice 切面的时间。

END 未完待续

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值