代理模式 & Java原生动态代理技术 & CGLib动态代理技术
2014-05-04 20:42
344 查看
第一部分、代理模式
代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。(其实就是在代理类中关联一个委托类的实例,然后在代理类中进行包装)。 UML图如下:
View Code
4、TestCglib.java
代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。(其实就是在代理类中关联一个委托类的实例,然后在代理类中进行包装)。 UML图如下:
package net.battier.proxy; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; /** * 使用cglib动态代理 * * @author student * */ public class BookFacadeCglib implements MethodInterceptor { private Object target; /** * 创建代理对象 * * @param target * @return */ public Object getInstance(Object target) { this.target = target; Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(this.target.getClass()); // 回调方法 enhancer.setCallback(this); // 创建代理对象 return enhancer.create(); } @Override // 回调方法 public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { System.out.println("事物开始"); proxy.invokeSuper(obj, args); System.out.println("事物结束"); return null; } }
View Code
4、TestCglib.java
package net.battier.test; import net.battier.dao.impl.BookFacadeImpl1; import net.battier.proxy.BookFacadeCglib; public class TestCglib { public static void main(String[] args) { BookFacadeCglib cglib=new BookFacadeCglib(); BookFacadeImpl1 bookCglib=(BookFacadeImpl1)cglib.getInstance(new BookFacadeImpl1()); bookCglib.addBook(); } }
相关文章推荐
- Java设计模式(七) Spring AOP JDK动态代理 VS. cglib
- 设计模式(2)--java动态代理及jdk和cglib的区别
- JAVA的代理模式(静态代理、JDK动态代理、cglib动态代理)
- 0104 Java设计模式03-动态代理(实战篇JDK和cglib)【进阶】
- java 代理模式 CGLIB的动态代理
- Java动态代理模式jdk和cglib的2种实现以及二者的区别(AOP面向切面的前奏)
- Java动态代理模式jdk和cglib的2种实现以及二者的区别(AOP面向切面的前奏)
- java动态代理模式(jdk和cglib)
- Java设计模式--代理模式与JDK动态代理,cglib动态代理
- Java 代理模式:静态代理、JDK 动态代理和 Cglib 动态代理的区别
- java动态代理模式之Cglib动态代理机制
- Java设计模式(七) Spring AOP JDK动态代理 vs. Cglib
- 代理模式(静态代理和动态代理) JAVA
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- 深入解析Java设计模式之动态代理
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- Java JDK中的静态代理、动态代理&Cglib动态代理
- Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)
- 设计模式(3)-结构型-代理模式(proxy)以及java动态代理的两种方式
- 【java设计模式:动态代理】