主要是对上一篇文章中涉及到的点做补充,欢迎指正!

1、  java反射知识-Spring IOC 依赖注入

  Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

  Java中有个继承至Object类的Class类,其对象用于表达Java程序运行时的所有类和接口,也用来表达enum、array、primitive Java types(boolean, byte, char, short, int, long, float, double)以及关键词void。当一个class被加载,或当加载器(class loader)的defineClass()被JVM调用,JVM 便自动产生一个Class 对象。【可以理解为一个类就是一个Class对象

  Java语言允许通过程序化的方式间接对Class对象进行操作,Class文件由类加载器在编译期装载后,在方法区中将形成一份描述Class对象结构的元信息数据,在堆中生成一个指向该元信息数据的Class对象,通过Class对象可以获知.class结构信息:如构造函数、属性和方法等。

  Java允许用户借由这个Class对象间接调用其功能,这就为使用程序化方式操作Class对象开辟了途径。

  反射优势在于:当我们的程序在运行时,需要动态的加载一些类这些类可能之前用不到所以不用加载到jvm,而是在运行时根据需要才加载,如果使用非反射,则需要修改代码,重新编译和运行,耗时耗资源。

            

            

2、  java动态代理-Spring AOP

  为其他对象提供一种代理以控制对这个对象的访问。实质就是将你要使用的类,重新生成一个子类或本类,这样框架就可以利用这个新生成的类做一些事情,比如在该类的方法前后加一些代码。这样的话,不用修改任何已经编写好的代码,只要使用代理就可以灵活的加入任何东西,将来不喜欢了,不用也不会影响原来的代码。动态代理是设计模式当中代理模式的一种。

  JDK 1.3以后,Java提供了动态代理的技术,允许开发者在运行期创建接口的代理实例。JDK的动态代理主要涉及到java.lang.reflect包中的两个类:Proxy和InvocationHandler。其中InvocationHandler是一个接口,可以通过实现该接口定义横切逻辑,并通过反射机制调用目标类的代码,动态将横切逻辑和业务逻辑编织在一起。而Proxy用来动态创建一个代理对象的类。

  每一个动态代理类handler都必须要实现InvocationHandler这个接口,并且每个代理类的实例都关联到了一个handler, 当我们通过代理对象调用一个方法的时候,这个方法的调用就会被转发为由InvocationHandler这个接口的 invoke 方法来进行调用。通过 Proxy.newProxyInstance 创建的代理对象是在jvm运行时动态生成的一个对象,它并不是我们的InvocationHandler类型,

public interface PersonDao {

public void say();

}

public class PersonDaoImpl implements PersonDao{

@Override

public void say() {System.out.println("time to eat");}

}

public class PersonHandler implements InvocationHandler {

private Object obj;

public PersonHandler(Object obj){this.obj=obj;}

@Override

public Object invoke(Object proxy, Method method, Object[] args)

throws Throwable {

System.out.println("before");

      // args表示say函数所需要的实际参数

Object result = method.invoke(obj, args);

System.out.println("after");

return result;

}

}

public class PersonTest {

@Test

public void test(){

PersonDao pDao = new PersonDaoImpl();

PersonHandler handler = new PersonHandler(pDao);

PersonDao proxy = (PersonDao)Proxy.newProxyInstance                 (pDao.getClass().getClassLoader(),

                pDao.getClass().getInterfaces(),

                handler);

proxy.say();

}

}

转载于:https://www.cnblogs.com/xiongchang95/p/8966632.html

spring(二)-反射、动态代理相关推荐

  1. 浅谈Spring中JDK动态代理与CGLIB动态代理

    前言 Spring是Java程序员基本不可能绕开的一个框架,它的核心思想是IOC(控制反转)和AOP(面向切面编程).在Spring中这两个核心思想都是基于设计模式实现的,IOC思想的实现基于工厂模式 ...

  2. 多态Class对象注册工厂反射动态代理

    运行时类型信息 类型信息(多态&Class对象&注册工厂&反射&动态代理) 一.为什么需要RTTI 二.Class对象 2.1 类字面常量 2.2 泛化的Class引用 ...

  3. Spring : Spring Aop CGLIB动态代理调用过程

    1.美图 2.概述 CGLIB动态代理参考: CGLIB动态代理 CGLIB原理解析参考:CGLIB原理解析 3.分析 Spring AOP CGLIB动态代理调用过程分析,CGLIB动态代理调用过程 ...

  4. 深圳Java培训:Spring框架之动态代理

    深圳Java培训:Spring框架之动态代理 前言 动态代理是一种常用的设计模式,广泛应用于框架中,Spring框架的AOP特性就是应用动态代理实现的,想要理解AOP的实现原理我们就必须先理解动态代理 ...

  5. 深入理解Java反射+动态代理,java开发面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起在群里探讨技术. 答: ...

  6. java 反射 动态代理

    在上一篇文章中介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大 ...

  7. spring中AOP动态代理的两种方式

    AOP动态代理的两种方式 Spring AOP动态代理的方式(spring的AOP默认是JDK Proxy) 浅谈这两种动态代理 JDK的动态代理,需要有实现接口 动态代理--JDK Proxy ⚫ ...

  8. 【Java从入门到头秃专栏 8】语法篇(七) :反射 动态代理 注解

    目录 1 反射机制 2 反射的应用:动态代理 3 注解 1 反射机制 反射机制(Reflect Machanism),是指在程序运行期间借助Reflect API获取任何类的内部信息,并能直接操作对象 ...

  9. 【java】深入分析Java反射-动态代理 proxy

    1.概述 转载:深入分析Java反射(四)-动态代理 [Java]Java 反射机制浅析 [Java]java代理 静态代理 动态代理 proxy [java]静态代理 proxy 2.动态代理的简介 ...

最新文章

  1. 如何上传webshell后改回原来的webshell的格式
  2. CentOS-6.4 minimal - 安装VMware Tools(linux)
  3. YBTOJ:比赛得分(期望)
  4. mysql-视图、事物等
  5. 用js将form表单同时提交到两个不同页面的方法
  6. 解决读取数据库里面中文字符乱码的问题
  7. 唯一被图灵求婚的女人,与他并肩破译纳粹德国 Enigma 密码,拯救千万人生命!| 人物志...
  8. 基于matlab的暴雨强度公式参数推求,基于Lingo和单纯形算法的综合暴雨强度公式参数解析...
  9. 【车道线】车道线检测代码复现---lanenet(小白篇)
  10. 学习笔记(16):GIS遥感科技论文写作技巧与方法初探-地理探测器
  11. `node2vec` `TSNE` 待解决问题
  12. 【刘润五分钟商学院】-161白马不是马吗?
  13. SQL日期时间格式转换大全
  14. 51单片机数码管动态显示数字
  15. PlantUML 之时序图
  16. 服务器项目迁移本地,云服务器迁移本地
  17. 数据结构实验之队列一:排队买饭
  18. 美国计算机科学专业申请条件,美国CS计算机科学专业申请条件有哪些?
  19. ai专家人工智能讲师老师叶梓老师《人工智能概念入门》培训人工智能项目咨询-8
  20. Oracle 字符集 原理及问题解决 (全)

热门文章

  1. 服务器架构设计文档,架构设计文档
  2. 学英语专业后悔了_上大学一定不要读英语专业?当年志愿填报我选了英语专业...
  3. ddt python_python之ddt模式随记
  4. 四种引用类型:强、软、弱、虚
  5. python day10
  6. C++ 模板和 C# 泛型之间的区别(C# 编程指南)
  7. 笔试编程题常用的一些技巧方法
  8. 9-51单片机ESP8266学习-AT指令(测试TCP服务器--51单片机程序配置8266,C#TCP客户端发信息给单片机控制小灯的亮灭)...
  9. ADO.NET中COMMAND对象的ExecuteNonQuery、ExcuteReader和ExecuteScalar方法
  10. 使用tar或dd等完成Linux系统备份恢复