java动态代理与AOP
来源:互联网 发布:呼吸税 知乎 编辑:程序博客网 时间:2024/06/05 19:49
动态代理是指客户通过代理类来调用其它对象的方法,并且是在程序运行时根据需要动态创建目标类的代理对象。
动态代理使用场合:1、调试
2、远程方法调用
代理设计模式的原理:使用一个代理将对象包装起来,然后用代理对象取代原始对象,任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。
在Java语言中Proxy类是专门完成代理的类,是所有动态代理类的父类。通过此类为一个或多个接口动态地生成实现类。Proxy类提供用于创建动态代理类和动态代理对象的静态方法
static Class<?> getProxyClass(ClassLoader loader, Class<?>... interfaces) 创建一个动态代理类所对应的Class对象
static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) 直接创建一个动态代理对象
使用Proxy生成一个动态代理时,往往并不会凭空产生一个动态代理,这样没有太大的意义。通常都是为指定的目标对象生成动态代理
这种动态代理在AOP中被称为AOP代理,AOP代理可代替目标对象,AOP代理包含了目标对象的全部方法。但AOP代理中的方法与目标对象的方法存在差异:AOP代理里的方法可以在执行目标方法之前、之后插入一些通用处理。
下面用一个小小的Demo来实现下。
interface Human{void info();void fly();}//被代理类class SuperMan implements Human{@Overridepublic void info() {System.out.println("我是超人,我怕谁!");}@Overridepublic void fly() {System.out.println("I believe I can fly!");}}class HumanUtil{public void method1(){System.out.println("=======方法一=======");}public void method2(){System.out.println("=======方法二=======");}}class MyInvocationHandler implements InvocationHandler{Object obj;//被代理对象的声明//实例化被代理对象public void setObject(Object obj){this.obj = obj;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {HumanUtil h = new HumanUtil();h.method1();//实现在method1()和method2()动态插入Object returnValue = method.invoke(obj, args);h.method2();return returnValue;}}class MyProxy{//动态的创建一个代理类的对象public static Object getProxyInstance(Object obj){MyInvocationHandler handler = new MyInvocationHandler();handler.setObject(obj);return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), handler);}}public class TestAOP {public static void main(String[] args) {SuperMan superMan = new SuperMan();Object obj = MyProxy.getProxyInstance(superMan);Human human = (Human) obj;human.info();System.out.println();human.fly();}}
0 0
- java动态代理与AOP
- 【Java进阶-Java动态代理与AOP】
- Spring AOP与Java动态代理
- Java动态代理与AOP概念
- 动态代理与AOP
- 动态代理与AOP
- 动态代理与AOP
- 动态代理与spring AOP
- Spring AOP与动态代理
- springDI与Aop动态代理
- 反射 动态代理与AOP
- Java动态代理实现AOP
- java动态代理实现aop
- java动态代理实现AOP
- java的动态代理(AOP)
- java动态代理实现AOP
- JAVA AOP之动态代理
- Java动态代理-->Spring AOP
- UIView设置背景图片
- android布局之二:布局复用
- CSDN网站系统升级公告
- Java中的日期操作类
- 快速排序算法
- java动态代理与AOP
- Devstack:OpenStack开发环境快速部署
- 关于java中泛型问题
- Nutch1.4+win7配置流程(亲测好用)
- 编程比赛 填空题 转载
- Spine 骨骼动画
- tomcat8下启动 jsp报错
- Filter 验证当前访问用户是否登录
- web service 自定义拦截器