Java代理设计模式

代理设计模式分类:

Ⅰ、静态代理模式:

①、为什么需要:静态代理模式?
			为了:减轻(需要:代理)的人的(工作量); 比如:雇主  和  管家
		②、静态代理:是什么?
			静态代理就是:一种(  访问者  -->  代理  -- >真实对象 )的设计模式。
		③、怎么实现:静态代理?
			1、创建:真实对象类
			2、创建:代理对象类(其中  private 真实对象    作为属性)
			3、创建:公共接口(具体是:功能)
			4、真实对象类:实现接口 (写自己直接做的事)
			5、代理对象类:实现接口(写出前置通知 、   调用真实对象实现方法、再写出后置通知)

Ⅱ、动态代理模式:

①、为什么需要:动态代理模式?
	因为:静态代理(不方便):每增加(一个)功能:接口就要写一个方法、代理再次复写。

②、动态代理:分为哪两种?
1、动态是什么?
动态,指的是代理类实在程序运行时创建的,而不是在程序运行前手动编码来定义代理类的。(与静态比较)
2、JDK动态代理

㈠、JDK动态代理:是什么?**
					是java JDK利用反射机制:在运行中创建代理的一种设计模式。(需要创建:功能接口)
	㈡、JDK动态代理:怎么用?
		1、创建:需代理的(对象类)
		2、创建:需代理对象的(功能接口)
		3、(需代理对象类):实现(功能)接口
		4、创建:代理对象类(并且实现:  InvocationHandler )接口
		5、在(代理对象类中):创建(需代理)对象
		6、在(代理对象类中)实现:(invoke方法) 并且书写:前置、method调用功能、 后置
		7、在测试类中:创建(功能类) = 利用Proxy.newInstance(测试类(类加载器), new Class[]功能类,代理对象 )
		8、功能类调用:方法即可
	㈢、JDK动态代理:优点
		优点:jdk 自带,不需要额外导入 jar
	㈣、JDK动态代理:缺点

3、cjlib动态代理

㈠、cjlib动态代理:是什么?
		cglib是一个java字节码的生成工具,它动态生成一个被(代理类的子类),
		子类重写被代理的类的(所有不是final的方法)。
		在子类中(采用方法拦截的技术)拦截所有(父类方法)的调用,顺势织入(横切逻辑)。
	㈡、cjlib动态代理:怎么用?
		1、导入jar:cjlib、asm
		2、创建:被代理的类,并且写相关:功能方法
		3、创建:代理类(实现MethodInterceptor)方法拦截器(选择调用父类方法)
		4、创建:测试类
		5、在测试类中:创建:拦截增强器(Enhancer)
		6、通过增强器:设置(被代理)(子类)setSuperclass(.class)
		7、通过增强器:设置:(被代理对象)调用
		8、通过增强器:创建(被代理对象)
		9、被代理对象:调用相关方法(即可)

	㈢、cjlib的优点:
		①、基于字节码,生成真实对象的子类:效率高于Java JDK动态代理
		②、不需要实现:接口
	㈣、cglib 缺点:
		非 JDK 功能,需要额外导入 jar

	㈤、注意:使用 spring aop 时,只要出现 Proxy 和真实对象转换异常

		①、XML中:<aop:aspectj-autoproxy
			proxy-target-class="true"></aop:aspectj-autoproxy>
	
		②、cglib 设置为 true 使用 
		③、默认(为false)JDK
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漫漫求

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值