类加载和反射

 

1、JDK动态代理和AOP(面向切面编程)

关于JDK的动态代理,最为人熟知的是Spring AOP的实现,默认情况下,Spring AOP的实现对于接口来说就是使用的JDK的动态代理来实现的,而对类的代理使用CGLIB来实现。

JDK的动态代理,就是在程序运行的过程中,根据被代理的接口来动态生成代理类的class文件,并加载运行的过程。JDK从1.3开始支持动态代理。

博客:https://blog.csdn.net/tyrroo/article/details/79072796

https://blog.csdn.net/jiankunking/article/details/52143504

https://www.jianshu.com/p/3616c70cb37b

 

2、类加载机制

类的加载由类加载器完成,类加载器通过用JVM提供。

两次运行Java程序处于两个不同的jvm进程中,两个jvm之间不会共享数据。

如:


public class A
{
    public static int a = 6;
}

/*public class A1
{
    public static void main(String[] args)
    {
        A a = new A();
        a.a++; // 7
    }
}

public class A2
{
    public static void main(String[] args) {
        A b=new A();
        b.a;   //6
    }
}
*/

类的加载:将类的class文件读入内存中,并创建一个java.lang.Class对象。

程序使用某个类是会通过加载、链接、初始化3个步骤对该类进行初始化。

Class对象的由来是将class文件读入内存,并为之创建一个Class对象。

类加载器:负责将.class文件(在磁盘或者网络上)加载到内存中,并生成对应的Java.lang.class对象。一旦同一个类被加载就不会再次载入了。

博客:https://www.cnblogs.com/xdouby/p/5829423.html

 

3、反射

生成并操作对象,运行时发现和使用类的信息。

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

其实就是动态的从内存加载一个指定的类,并获取该类中的所有的内容。

Java对象类型:编译时的类型和运行时的类型。

Person p=new Student();p变量编译类型为Person,运行类型为Student。

Class 类与 java.lang.reflect 类库一起对反射的概念进行了支持,该类库包含了 Field,Method,Constructor 类 (每个类都实现了 Member 接口)。这些类型的对象时由 JVM 在运行时创建的,用以表示未知类里对应的成员。

博客:https://blog.csdn.net/sinat_38259539/article/details/71799078

https://www.cnblogs.com/chanshuyi/p/head_first_of_reflection.html

https://www.cnblogs.com/luoxn28/p/5686794.html

https://www.cnblogs.com/tech-bird/p/3525336.html

Spring中的IoC(控制反转)的实现原理就是工厂模式加反射机制。

https://www.cnblogs.com/Eason-S/p/5851078.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值