当前位置: 代码迷 >> 综合 >> java第一课---反射和代理模式的学习
  详细解决方案

java第一课---反射和代理模式的学习

热度:27   发布时间:2024-02-12 05:05:33.0

  大家都知道设计模式有23种,但是每种的含义、实际的应用都很模糊。自己从16年4月从培训班出来工作就没有认真的理解过设计模式,都是拼了命的在做业务开发。所以成长的第一阶段就是先把23种设计模式好好理理。

设计模式的分三大类:

创建型模式

  工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式

  适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式

行为模式

  策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

  今天还学了反射,通过视频和百度的资料,简单总结一下什么是反射。官方的原话是:“Java反射指的是在Java程序运行状态中,对于任何一个类,都可以获得这个类的所有属性和方法;对于给定的一个对象,都能够调用它的任意一个属性和方法。这种动态获取类的内容以及动态调用对象的方法称为反射机制。

  反射机制是破坏了JAVA面向对象开发原则的,当然我觉得是也是为了实际的应用而存在的,毕竟用到反射的地方很多。比如:

  1. JDBC驱动链接加载 class.forname("类的绝对路径")的方法
  2. IOC容器的注入
  3. 自定义注解(AOP+反射)
  4. 第三方框架
  5. 持久层的代码生成器
  6. 破解常用的单例方法(除了枚举,只是特例)

  今天讲的是设计模式中的代理模式,其实工作中大家无形中都用到过这种模式的,只是以前我也不知道这叫就代理模式。代理模式主要分静态代理和动态代理。代理模式最核心的点就是对方法前后的业务(逻辑)进行增强处理,或者说统一处理。

代理模式的优点:减少代码冗余,提高代码复用性,安全性 隐藏真实角色、非侵入。

静态代理与动态代理

静态代理:也需要开发者自己编写代理类。就是相当于一个接口层,一个实现层。这也是静态代理的缺点,但是目前大家都是这样干的,大家最常用的service层和impl的实现层。

静态的实现方式:1.实现接口(Jdk实现)2通过继承模式(Cglib)

动态代理设计需要写代理,统一采用程序生成。动态代理最简单的理解就是我们不需要去写被代理层也就是实现层(impl层。),而且程序自己生成。动态代理是在实现阶段不用关心代理类,而在运行阶段才指定哪一个对象(那个接口类)。动态代理类的源码(实现层的代码)是在程序运行期间由JVM根据反射等机制动态的生成 。

Jdk动态代理

JDK动态代理的一般步骤如下:

1.创建被代理的接口和类;

2.实现InvocationHandler接口,对目标接口中声明的所有方法进行统一处理;

3.调用Proxy的静态方法,创建代理类并生成相应的代理对象;

实现原理:利用拦截器机制必须实现InvocationHandler接口中的invoke方法实现对我们的目标方法增强。

---------------------------------------------------------------

今天就先总结到这里,下次继续写代理模式中CGLIB实现如果实现代理模式,为什么比JDK动态代理效率高。