java代理(一,理解)

什么叫代理(proxy)?
 概念:短时间代人担任职务。
 java中的代理?
 一个类代替另一个类去执行他的相应方法,例如:A类中有m方法,我们用B类代理A去调用A的m方法就是java中的代理。
 例如:你去银行柜台存钱,你就是实际角色,你要做的事情是存钱,柜台操作员就相当于是你的代理,操作员拿着你的钱,要帮你存钱,你们共同的接口方法
  是存钱,再存钱之前,操作员会,进行数钱(调用数钱的方法),核实完毕之后,进行存储(代理调用存钱的方法),你的钱到了你账户上,你是真实
  角色是受益者,存入成功之后操作员会进行打印回单操作(调用打印的方法),这就是一个代理模式的体现。
 
一、java静态代理
 抽象角色:实际对象和代理对象的共同接口或者共同父类。
 实际角色:代理角色所代表的真实角色,是我们最终要引用的对象。
 代理角色:代理对象角色内部含有对真是对象的引用,从而可以操作真实对象,同时代理对象要提供和真实对象相同的方法,以便
  任何时刻都能代替真实对象,同时代理对象可以在执行真实对象操作时,附加其他的操作。
  
 静态代理的坏处:真实角色必须是事先已经存在的,并将其作为代理类的内部属性,这样就写死了,实际是使用中,
 一个真实的角色必须对应一个代理角色,如果大量使用会导致出现非常多的代理类,导致类的急剧膨胀。
 
 另外:如果事先是不知道真实角色是什么的话,该如何解决呢?这个问题可以通过以下java的动态代理机制来解决。
  
  
二、java动态代理(个人理解动态代理是jdk自己在静态代理基础上进行了一次封装)
 关注点之一:动态代理生成的对象所在的类和实际角色对象所在的类是实现同一抽象角色的。
 关注点之二:动态代理一定要使用接口类型来强制转换,原因是动态代理机制的关注点之一,是基于实现接口实现的。
 
 动态代理能够解决的问题?
 在事先是不知道真实角色是什么的话,来进行代理,比如有很多很多给类都实现了同一个接口,在真实角色产生之前我们不知道
 此接口应该引用的是哪一个真实的对象,比如此对象是通过类的反射机制通过传递类名的不同可以动态产生,这个时候,我们就
 使用动态代理,会根据不能的真实对象动态的产生对应实现了同一个接口的代理对象,十分方便,而且动态产生了代理类,不用
 我们再事先定义很多已经定义好的静态的代理类,避免了类爆炸(项目中的类数量急剧增加),还提高了代理的灵活性,否则静态
 代理如果没有代理类的话还需要再次定义出来。
 
 动态代理需要哪些前提知识?
 1.类的反射机制
 
 动态代理相关的接口和类?
 1.位置:都在 java.lang.reflect 包下
 2.涉及到的接口和类
  1)InvocationHandler(Interface) 该接口中仅定义了一个方法 public Object invoke(Object obj,Method method,Object[] args){}
   个人理解这个接口提供了一个创建代理对象的引用关系,有了他之后才清楚代理对象的结构要如何创建,才能知道是根据哪个接口建立代理
   对象。
   这个方法是有jvm底层机制,自动调用,我们不用去关注细节。
  参数描述
  .方法的第一个参数(obj)一般是指动态代理类
  .方法的第二个参数(method)是动态代理的方法
  .方法的第三个参数(args是)是该方法中的所有参数,因为参数可能有多个,所以是数组
  2)Proxy:用于创建出动态代理类的一个类
   newProxyInstance()方法可以创建出动态代理对象,由于可以创建出任何类类型的动态代理类来,所以方法的返回类型
   为Object,使用之前要转换为抽象角色的接口,然后才去调用方法。


静态代理和动态代理的区别?
1.静态代理的代理类是要实现是在你的项目中预定义好的,写出来的。
  动态代理是在程序运行过程中,在内存中动态产生的代理类对象,不需要预先在你的项目中定义出来的。
2.静态代理的代理类是写死的,只要写一个类想要由其他类代理就必须先写死这个静态代理类,需要额外静态代理类的定义
  如果需要很多类被代理的话,需要在项目中定义很多的代理类。
  动态代理类是根据你要被代理的类所实现的接口动态产生,不用写死,什么类型都支持,有灵活多变的可扩展性,不用另外增加额外的类定义。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值