java 反射 及动态代理

class Foo{}

Foo foo1=new Foo();

在面向对象世界里,万事万物皆对象

类也是对象,是java.lang.Class类的对象,任何一个类都是Class的实力实例对象,这个实例对象有三种表示方式,

(1)Class s1=Foo.class  # 每一个类都有一个隐含的静态变量class

(2)Class s2=foo1.getClass();#s1,s2是Foo类的类类型  s1==s2 True,一个类只可能是class类的一个实例对象,所以是s1==s2

(3)Class s3=Class.forName("com.gjl.entity.Foo")

创建实例:Foo foo=(Foo)s1.newInstance()#此类必须要有午无参构造方法,因为他要调用无参构造方法

new 对象是静态加载类,反射是动态加载类

class A{

    public void add(int a,int b){

        System.out.print(a+b);

    }

}

A a1=new A()

==================================================

Class c1=Class.forName("com.gjl.entity.A")

Method m1=c1.getMethod("add",int.class,int.class)#获取类的public方法

Method m1=c1.getMethod("add",new Class[]{int.class,int.class})

Object o=m1.invoke(a1,new Oblect[]{10,12})#打印22

 

代理模式(通过代理静默地解决一些业务无关的问题,比如远程、安全、事务、日志、资源关闭……让应用开发者可以只关心他的业务)
    静态代理:事先写好代理类,可以手工编写,也可以用工具生成。缺点是每个业务类都要对应一个代理类,非常不灵活。
    动态代理:运行时自动生成代理对象。缺点是生成代理代理对象和调用代理方法都要额外花费时间。
        JDK动态代理:基于Java反射机制实现,必须要实现了接口的业务类才能用这种办法生成代理对象。新版本也开始结合ASM机制。
        cglib动态代理:基于ASM机制实现,通过生成业务类的子类作为代理类。
Java 发射机制的常见应用:动态代理(AOP、RPC)、提供第三方开发者扩展能力(Servlet容器,JDBC连接)、第三方组件创建对象(DI)……

创建jdk 动态代理步骤

java 反射 及动态代理