当前位置: 首页 > news >正文

互联网官方网站化妆品网站建设实施背景

互联网官方网站,化妆品网站建设实施背景,网站标签优化,网校培训一篇博客读懂设计模式之---动态代理与反射 先来讲一下反射#xff1a; 1 关于反射反射最大的作用之一就在于我们可以不用在编译时就知道某个对象的类型#xff0c;而在运行时通过提供完整的”包名类名.class”得到。注意#xff1a;不是在编译时#xff0c;而是在运行时。…一篇博客读懂设计模式之---动态代理与反射 先来讲一下反射 1 关于反射反射最大的作用之一就在于我们可以不用在编译时就知道某个对象的类型而在运行时通过提供完整的”包名类名.class”得到。注意不是在编译时而是在运行时。功能•在运行时能判断任意一个对象所属的类。•在运行时能构造任意一个类的对象。•在运行时判断任意一个类所具有的成员变量和方法。•在运行时调用任意一个对象的方法。说大白话就是利用Java反射机制我们可以加载一个运行时才得知名称的class获悉其构造方法并生成其对象实体能对其fields设值并唤起其methods。应用场景反射技术常用在各类通用框架开发中。因为为了保证框架的通用性需要根据配置文件加载不同的对象或类并调用不同的方法这个时候就会用到反射——运行时动态加载需要加载的对象。缺点由于反射会额外消耗一定的系统资源因此如果不需要动态地创建一个对象那么就不需要用反射。另外反射调用方法时可以忽略权限检查因此可能会破坏封装性而导致安全问题。2 动态代理为其他对象提供一种代理以控制对这个对象的访问。在某些情况下一个对象不适合或者不能直接引用另一个对象而代理对象可以在两者之间起到中介的作用可类比房屋中介房东委托中介销售房屋、签订合同等。所谓动态代理就是实现阶段不用关心代理谁而是在运行阶段才指定代理哪个一个对象不确定性。如果是自己写代理类的方式就是静态代理确定性。组成要素(动态)代理模式主要涉及三个要素其一抽象类接口其二被代理类具体实现抽象接口的类其三动态代理类实际调用被代理类的方法和属性的类 动态代理有三个必要条件 1. 要有两个角色代理对象和被代理对象 2. 代理对象要持有被代理对象的引用要有被代理对象的信息 3. 注重过程必须要做的事情被代理对象没时间或者不想做 实现方式:实现动态代理的方式很多比如 JDK 自身提供的动态代理就是主要利用了反射机制。还有其他的实现方式比如利用字节码操作机制类似 ASM、CGLIB基于 ASM、Javassist 等。 举例常可采用的JDK提供的动态代理接口InvocationHandler来实现动态代理类。其中invoke方法是该接口定义必须实现的它完成对真实方法的调用。通过InvocationHandler接口所有方法都由该Handler来进行处理即所有被代理的方法都由InvocationHandler接管实际的处理任务。此外我们常可以在invoke方法实现中增加自定义的逻辑实现实现对被代理类的业务逻辑无侵入。 代理模式在我们生活中其实都有很多形象的例子比如媒婆租房中介等等都是典型的动态代理模式下面我们就以大家比较熟悉的媒婆来举例更加生动形象的来介绍动态代理 首先先用JDK来实现动态代理必要条件被代理对象要实现一个接口 public interface Person {void findGF(); } public class James implements Person{Overridepublic void findGF() {System.out.println(高富帅);System.out.println(有房有车的);System.out.println(身高要求180cm以上体重70kg);} } public class Meipo implements InvocationHandler {private Object target; //被代理对象的引用作为一个成员变量保存下来了//获取被代理人的个人资料public Object getInstance(Object target) throws Exception{this.target target;Class clazz target.getClass();System.out.println(被代理对象的class是:clazz);return Proxy.newProxyInstance(clazz.getClassLoader(), clazz.getInterfaces(), this);}Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println(我是媒婆 得给你找个异性才行);System.out.println(开始进行海选...);System.out.println(------------);//调用被代理类的方法这里就会调用James的方法method.invoke(this.target, args);System.out.println(------------);System.out.println(如果合适的话就准备办事);return null;} } 测试类 public class TestJDKProxy {public static void main(String[] args) {try{Person person (Person) new JDKMeiPo().getInstance(new XiaoJie());//下面调用findGF()就会调用invoke()方法person.findGF();}catch (Exception e){e.printStackTrace();}} } 下面用CGLIB方式来实现动态代理CGLIB相比JDK的方式优势是被代理类不一定要去实现接口它是通过CGLIB来生成被代理类的子类继承父类的方法和属性从而达到代理的效果 public class James {public void findLove(){System.out.println(肤白貌美大长腿);} } 代理类需要实现MethodInterceptor接口 public class Meipo implements MethodInterceptor{//好像并没有持有被代理对象的引用public Object getInstance(Class clazz) throws Exception{Enhancer enhancer new Enhancer();//把父类设置为谁//这一步就是告诉cglib生成的子类需要继承哪个类enhancer.setSuperclass(clazz);//设置回调enhancer.setCallback(this);//第一步、生成源代码//第二步、编译成class文件//第三步、加载到JVM中并返回被代理对象return enhancer.create();}//同样是做了字节码重组这样一件事情//对于使用API的用户来说是无感知Overridepublic Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {System.out.println(我是媒婆 得给你找个异性才行);System.out.println(开始进行海选...);System.out.println(------------);//这个obj的引用是由CGLib给我们new出来的//cglib new出来以后的对象是被代理对象的子类继承了我们自己写的那个类//OOP, 在new子类之前实际上默认先调用了我们super()方法的//new了子类的同时必须先new出来父类这就相当于是间接的持有了我们父类的引用//子类重写了父类的所有的方法//我们改变子类对象的某些属性是可以间接的操作父类的属性的proxy.invokeSuper(obj, args);System.out.println(------------);System.out.println(如果合适的话就准备办事);return null;} } public class TestGglibProxy {public static void main(String[] args) {//JDK的动态代理是通过接口来进行强制转换的//生成以后的代理对象可以强制转换为接口//CGLib的动态代理是通过生成一个被代理对象的子类然后重写父类的方法//生成以后的对象可以强制转换为被代理对象也就是用自己写的类//子类引用赋值给父类try {James obj (James)new Meipo().getInstance(James.class);obj.findLove();} catch (Exception e) {e.printStackTrace();}} } 额外 静态代理事先写好代理类可以手工编写也可以用工具生成。缺点是每个业务类都要对应一个代理类非常不灵活。   动态代理运行时自动生成代理对象。缺点是生成代理代理对象和调用代理方法都要额外花费时间。  JDK动态代理基于Java反射机制实现必须要实现了接口的业务类才能用这种办法生成代理对象。新版本也开始结合ASM机制。   cglib动态代理基于ASM机制实现通过生成业务类的子类作为代理类。Java 发射机制的常见应用动态代理AOP、RPC、提供第三方开发者扩展能力Servlet容器JDBC连接、第三方组件创建对象DI……
http://wiki.neutronadmin.com/news/5888/

相关文章:

  • 遂宁做网站ps网页设计视频教程
  • 在小网站上做点击广告手机网站 自适应屏幕
  • 可以自己做网站这么做做网站jijianjianzhan
  • 文化传媒公司能否建设经营网站茂名网站建设公司
  • 做笑话网站钱包网站建设
  • 广东外贸网站建设企业盘锦做网站价格
  • 网站前置审批怎么做手机移动端网站
  • 国外主题网站济南正宗网站建设平台
  • 学做花蛤的网站网站架构基本知识
  • 怎么创建网站详细流程网站开发 改进
  • joomla 企业网站模板河南平台网站建设价位
  • 网站如何做移动网站服务好质量好的网站制作
  • 青岛胶东建设国际机场网站photoshop正版软件多少钱
  • 做网站需要招什么职位东山网站建设
  • 磁力链接 网站怎么做的搜狐视频
  • 网站建设的有什么需求江苏省造价信息工程网
  • 如何建设和优化一个网站步骤中山网站建设开发
  • 湖北建设厅政务网站app免费版下载安装
  • 树莓派做网站什么是网络营销?与电商营销有什么区别?
  • 网站优化细节网站建设项目推文
  • 无锡建设网站的公司简介wordpress 去掉标题
  • php网站模版音乐网站整站程序
  • 网站建设与代运营介绍网站开发 设计文档
  • 沈阳微网站建设网站建设资金的请示
  • 站群系统有哪些做网站 中企动力
  • 网站备案及管理的授权书php网站 上传
  • 关于营销方面的网站北京网站建设公司收购
  • 一起做网店官方网站美丽乡村 村级网站建设
  • 太原网站建设找山西云起时个人网站建设方案模板
  • 可以先做网站后备案么网站开发经营范围