017--JDK原生动态代理是怎么实现的+面试题

VIP免费
2024-12-11 1 0 20.32KB 7 页 5.9玖币
侵权投诉
JDK 原生动态代理是怎么实现的 + 面试题
反射
反射机制是 语言提供的一种基础功能,赋予程序在运行时自省()的能
力。简单来说就是通过反射,可以在运行期间获取、检测和调用对象的属性和方法。
反射的使用场景
在现实中反射的使用场景有很多,比如以下几个。
使用场景一 :编程工具  等,在写代码时会有代码(属性或方法名)提
示,就是因为使用了反射。
使用场景二:很多知名的框架,为了让程序更优雅更简洁,也会使用到反射。
例如, Spring可以通过配置来加载不同的类,调用不同的方法,代码如下所示:
<bean id="person" class="com.spring.beans.Person" init-method="initPerson">
</bean>
例如, MyBatis  使用外部类的 构建查询时,代码如下所示:
@SelectProvider(type = PersonSql.class, method = "getListSql")
List<Person> getList();
class PersonSql {
public String getListSql() {
String sql = new SQL() {{
SELECT("*");
FROM("person");
}}.toString();
return sql;
}
}
使用场景三:数据库连接池,也会使用反射调用不同类型的数据库驱动,代码如下所
示:
String url = "jdbc:mysql://127.0.0.1:3306/mydb";
String username = "root";
String password = "root";
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(url, username, password);
当然反射还有其他很多类似的使用场景,这里就不一一列举,读者可以举一反三,想想在
平常的开发中,还有哪些使用了反射功能的场景。
反射的基本使用
下来我们通过反射调用类中的某个方法,来学习反射的基本使用。
使用反射调用类中的方法,分为三种情况:
调用静态方法
调用公共方法
调用私有方法
假设有一个实体类 包含了以上三种方法,代码如下:
package com.interview.chapter4;
class MyReflect {
// 静态方法
public static void staticMd() {
System.out.println("Static Method");
}
// 公共方法
public void publicMd() {
System.out.println("Public Method");
}
// 私有方法
private void privateMd() {
System.out.println("Private Method");
}
}
下面分别来看,使用反射如何调用以上三种类型的方法。
反射调用静态方法
Class myClass = Class.forName("com.interview.chapter4.MyReflect");
Method method = myClass.getMethod("staticMd");
method.invoke(myClass);
反射调用公共方法
Class myClass = Class.forName("com.interview.chapter4.MyReflect");
// 创建实例对象(相当于 new
Object instance = myClass.newInstance();
Method method2 = myClass.getMethod("publicMd");
method2.invoke(instance);
反射调用私有方法
Class myClass = Class.forName("com.interview.chapter4.MyReflect");
// 创建实例对象(相当于 new
Object object = myClass.newInstance();
Method method3 = myClass.getDeclaredMethod("privateMd");
method3.setAccessible(true);
method3.invoke(object);
反射使用总结
反射获取调用类可以通过  ! ,反射获取类实例要通过 " !,相当
" 一个新对象,反射获取方法要通过 #$% ! ,获取到类方法之后使用 & !
摘要:

JDK原生动态代理是怎么实现的+面试题反射反射机制是Java语言提供的一种基础功能,赋予程序在运行时自省(introspect)的能力。简单来说就是通过反射,可以在运行期间获取、检测和调用对象的属性和方法。反射的使用场景在现实中反射的使用场景有很多,比如以下几个。使用场景一:编程工具IDEA或Eclipse等,在写代码时会有代码(属性或方法名)提示,就是因为使用了反射。使用场景二:很多知名的框架,为了让程序更优雅更简洁,也会使用到反射。例如,Spring可以通过配置来加载不同的类,调用不同的方法,代码如下所示:例如,MyBatis在Mapper使用外部类的SQL构建查询时,代码如下所示:@Se...

展开>> 收起<<
017--JDK原生动态代理是怎么实现的+面试题.docx

共7页,预览2页

还剩页未读, 继续阅读

声明:本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。玖贝云文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知玖贝云文库,我们立即给予删除!
分类:计算机 价格:5.9玖币 属性:7 页 大小:20.32KB 格式:DOCX 时间:2024-12-11

开通VIP享超值会员特权

  • 多端同步记录
  • 高速下载文档
  • 免费文档工具
  • 分享文档赚钱
  • 每日登录抽奖
  • 优质衍生服务
/ 7
客服
关注