============== 动态代理易管理 ============== 虽有如下配置 但是 UserService userService = applicationContext.getBean( "userService", UserService.class); 所得到的并非原始类的对象,而是一个代理类的对象,代理原始类的对象。 那么,这个代理类究竟在哪里? Spring框架在运行时,借助动态字节码技术,在JVM中动态创建了代理类。程序终止后,该代理类与JVM一起被销毁。 什么是动态字节码? ________ _________ ___ ___ |xxx.java|____ |xxx.class|___ |JVM|_________ |JVM|_______ | | | | | | | | |xxx类的源代码|-编译->|xxx类的字节码|-加载->|xxx类的字节码|-运行->|xxx类的对象| |_____________| |_____________| |_____________| |___________| ______________ ___ ___ |动态字节码框架|______ |JVM|_________ |JVM|_______ | | | | | | |ASM、JAVAssist或CGLib|-加载->|xxx类的字节码|-运行->|xxx类的对象| |_____________________| |_____________| |___________| 没有源代码,亦无需编译,直接通过动态字节码框架,在JVM中生成xxx类的字节码,进而创建出对象。 代理类完全由JVM动态创建而非手动编写,因此就规避了静态代理类文件多,难以管理的弊端。