关于反射和动态代理和AOP

package Exercise.reflect;

/**
 * 反射把java中所有的东西都当做对象,甚至是类的本身也作为一种对象,并把它作为Class的对象的实例;
 * 反射是把类、类的属性、方法都作为一个对象类进行剖析;
 *
 * 为什么需要反射?把类变成活的,当一个类经过java虚拟机编译之后会生成对应的字节码文件,即xxx.class,
 * 而反射就是去解析这个类的信息,包括其中所包含的变量和方法;
 * 在运行期间去加载一个类,并对类进行剖析,甚至可以给一个类的属性动态的赋值,也可以去唤醒它的内部的方法,
 *
 * Spring容器就是用反射去加载一个类的;
 *
 * 感觉反射很神奇,抽象,它的底层到底是如何实现的?反射的底层到底是如何实现的?说获得一个类就获得一个类,
 * 是不是编译原理的?
 * 源代码→预处理器 → 编译器 → 目标代码(机器语言) → 可执行文件
 *
 * 另外,java虚拟机的原理到底是什么?把一个类加载,并生产对应的字节码文件;java虚拟机在一定程度上已经   替代了编译器,生成了目标文件,所以它能随处运行;
 * */
public class ClassDemo01 {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
        //Foo实例对象
        Foo foo1=new Foo();

        //通过类本身的编译类获得这个类;
        Class c1=Foo.class;

        //该类对象通过getClass方法
        Class c2=foo1.getClass();
        System.out.println(c1==c2);

        //类的类类型创建该类的对象实例;
        Class c3=null;
        System.out.println(c2==c3);
        c3=Class.forName("Exercise.reflect.Foo");

        //获得类的类类型创建该类的对象实例;
        Foo foo=(Foo)c1.newInstance();
        foo.print();
    }
}
class Foo{
    void print(){
        System.out.println("foo");
    }
}

关于反射,可以参看之前写的,https://www.cnblogs.com/shijinglu2018/p/8371615.html

原文地址:https://www.cnblogs.com/shijinglu2018/p/11343282.html

时间: 2024-12-25 21:16:46

关于反射和动态代理和AOP的相关文章

动态代理和AOP切面编程

import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /* * 动态代理和AOP切面编程 */ //定义一个接口 interface Person { void eat(); void breath(); } // 定义一个实现接口的实现类,即为被代理类 class Student implements Person { @Overr

黑马程序员--Java高新(10)_动态代理和AOP编程

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一, 动态的核心 动态代理的两个核心,Proxy 和 InvocationHandler,都是Java.lang.reflect包下的接口类;由此也可以看出动态代理是反射的高级应用! 代理与反射的关系如何体现?从代理的建立过程的构建方法及其参数可见一斑: 1,代理最核心的Handler的唯一方法invoke()的核心参数Method method,是一个Class类型,并且在代理调用时,inv

动态代理和AOP

之前说过了我对IOC的理解,这篇文章说以下我对动态代理和基本的对AOP的理解. 所谓动态代理就是,在运行时,动态创建实现了一组指定接口的实现类对象. 比如有: interface A { } interface B{ } 即: Object o = 方法(new Class[] {A.class,B.class}) , o实现了A和B两个接口 但是我们在运行时是无法写源代码来进行这个类的创建. 这时候我们需要用到Proxy类下的newProxyInstance()方法. 1.newProxyIn

【Spring】AOP之JDK动态代理和CGLib动态代理

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 一.JAVA动态代理  1.1 代理模式         代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务. 按照代理的创

Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)

第一种代理即Java的动态代理方式上一篇已经分析,在这里不再介绍,现在我们先来了解下GCLIB代理是什么?它又是怎样实现的?和Java动态代理有什么区别? cglib(Code Generation Library)是一个强大的,高性能,高质量的Code生成类库.它可以在运行期扩展Java类与实现Java接口. cglib封装了asm,可以在运行期动态生成新的class. cglib用于AOP,jdk中的proxy必须基于接口,cglib却没有这个限制. 原理区别: java动态代理是利用反射机

spring aop原理 JDK动态代理和CGLIB动态代理

Spring的两大特性是IOC和AOPIOC负责将对象动态的注入到容器,从而达到一种需要谁就注入谁,什么时候需要就什么时候注入的效果.理解spring的ioc也很重要.但是今天主要来和大家讲讲aop.AOP 广泛应用于处理一些具有横切性质的系统级服务,AOP 的出现是对 OOP 的良好补充,用于处理系统中分布于各个模块的横切关注点,比如事务管理.日志.缓存等等. AOP实现的关键在于AOP框架自动创建的AOP代理.AOP代理主要分为静态代理和动态代理, 静态代理的代表为AspectJ:动态代理则

JDK动态代理和CGLIB动态代理

转载自http://www.itzhai.com/java-dong-tai-dai-li-zhi-jdk-dong-tai-dai-li-he-cglib-dong-tai-dai-li-mian-xiang-qie-mian-bian-cheng-aop-yuan-li.html 静态代理 静态代理相对来说比较简单,无非就是聚合+多态: 参考:设计模式笔记 – Proxy 代理模式 (Design Pattern) 动态代理 我们知道,通过使用代理,可以在被代理的类的方法的前后添加一些处理方

黑马程序员_代理和AOP(一)

/** * 代理和AOP(一) * * 1.分析代理类的作用与原理及AOP的概念 * * 1.1 代理类:一个代理类通常有自己的代理目标类,代理类是对目标类的代理,一般代理类的方法和目标类的方法签名一致,是对 * 目标类的包装,代理类的各个方法中通常除了要调用目标的相应方法和对外返回目标的方法返回的结果之外, * 还可以在代理类的方法中 加入一些系统功能代码,添加的位置有四个地方: * 分别是目标方法调用前,目标方法调用后,目标方法调用前后,在处理目标方法异常的catch块中. * 例如: *

JDK动态代理和CGLIB代理的区别

一.原理区别: java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理. 而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理. 1.如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 2.如果目标对象实现了接口,可以强制使用CGLIB实现AOP 3.如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换 如何强制使用