动态代理

1、java是一种静态(编译时检查)强类型(不同类型赋值需要转化)的语言,部分动态语言类型的能力,比如反射机制

2、实现动态代理的方式:jdk自带的实现,asm,cglib(基于asm),javassist等

3、java反射:通过运行时操作对象,灵活处理运行时才能确定的信息

4、动态代理:很多重复的繁琐的编程,可以使用动态代理去解决

5、应用场景:比如java类,运行时自动生成get,set方法,不需要开发重复写代码,accessible可以修改成员的访问权限(public,protected,private)

6、代理可以看作是对调用目标的一个封装,对目标的调用不直接发生,通过代理完成,实现调用者和实现者的解耦

7、java动态代理的例子

public class MyDynamicProxy {
    public static  void main (String[] args) {
        HelloImpl hello = new HelloImpl();
        MyInvocationHandler handler = new MyInvocationHandler(hello);
        // 构造代码实例
        Hello proxyHello = (Hello) Proxy.newProxyInstance(HelloImpl.class.getClassLoader(), HelloImpl.class.getInterfaces(), handler);
        // 调用代理方法
        proxyHello.sayHello();
    }
}
interface Hello {
    void sayHello();
}
class HelloImpl implements  Hello {
    @Override
    public void sayHello() {
        System.out.println("Hello World");
    }
}
 class MyInvocationHandler implements InvocationHandler {
    private Object target;
    public MyInvocationHandler(Object target) {
        this.target = target;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        System.out.println("Invoking sayHello");
        Object result = method.invoke(target, args);
        return result;
    }
}

8、AOP 通过(动态)代理机制可以让开发者从这些繁琐事项中抽身出来,大幅度提高了代码的抽象程度和复用度。从逻辑上来说,我们在软件设计和实现中的类似代理,如 Facade、Observer 等很多设计目的,都可以通过动态代理优雅地实现。日志,事务,权限,异常处理

9、选型需要考虑的因素:

性能、可靠性,可维护性,编程的工作量

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值