Java反射机制与动态代理
来源:互联网 发布:雅思怎么做精听 知乎 编辑:程序博客网 时间:2024/05/16 10:42
三种获取当前的Class类对象
1)Object类中有一个方法:getClass()
2)通过数据类型的静态属性;String.class,int.class,Person.class
3)Class类中提供了一一个方法:forName(“当前类的全路径名称”);
Class类应用
Field
getField() getFields() getDeclaredField() getDeclaredFields()
Constructor
getConstrutor() getConstrutors() getConDeclaredConstructor() getConDeclaredConstructors()
Method
getMethod() getMethods() getDeclaredMethod() getDeclaredMethods()
带s返回的是数组,带Declared返回的指定 啥都不加返回的公有
//下面是常的的反射方法
public class Person { private String name ; int age ; public String address ; public Person(){ } //构造方法 private Person(String name){ this.name = name ; } Person(String name,int age){ this.name = name ; this.age = age ; } public Person(String name,int age,String address){ this.name = name ; this.age = age ; this.address = address ; } //成员方法 public void show(){ System.out.println("show"); } public void method(String s){ System.out.println("method"+s); } public String getString(String s,int i){ return s+"---"+i ; } private void function(){ System.out.println("function"); } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", address=" + address + "]"; }}--------------------------------------------------------------------//用构造器建立对象 线面代码要用到//public Constructor<T> getConstructor(Class<?>... parameterTypes)Constructor con = c.getConstructor(String.class,int.class,String.class) ;Object obj = con.newInstance(); 重点是但参数的方法反射格式的写法,如获取指定参数的时候c.getMethod("getString", String.class,int.class)"getString"表示方法名.其他的自己可以试一试 1有参构造方法 //有参数的构造方法 //public Constructor<T> getConstructor(Class<?>... parameterTypes) Constructor con = c.getConstructor(String.class,int.class,String.class) ; //创建构造方法的实例:NewInstance(Object...args):传递的是实际操作 Object obj = con.newInstance("高圆圆",27,"户县"); //输出当前这个对象 System.out.println(obj);2获取字段 //获取指定的字段的方法 Field nameField = c.getDeclaredField("name") ; nameField.setAccessible(true) ; nameField.set(obj, "高圆圆");3单个的公共方法的获取 Method m3 = c.getMethod("getString", String.class,int.class) ; //调用方法进行实际参数的传递 Object resultString = m3.invoke(obj, "world",100); System.out.println(resultString);
动态代理
/*
代理类
*/
public class Main { public static void main(String[] args) { UserDao ud=new UserDaoImpl(); MyInvocationHandler mih=new MyInvocationHandler(ud); UserDao proxy=(UserDao) Proxy.newProxyInstance(ud.getClass().getClassLoader(), ud.getClass().getInterfaces(), mih); proxy.add(); proxy.delete(); }}
/*
*
* InvocationHandler 是代理实例的调用处理程序 实现的接口。
每个代理实例都具有一个关联的调用处理程序。对代理实例调用方法时,
将对方法调用进行编码并将其指派到它的调用处理程序的 invoke 方法。
- */
public class MyInvocationHandler implements InvocationHandler{ // public Object target; public MyInvocationHandler(Object target) { this.target=target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub Object result=method.invoke(target, args); return result; }}public interface UserDao { public void delete(); public void add(); public void update(); public void find();} public class UserDaoImpl implements UserDao{ @Override public void delete() { // TODO Auto-generated method stub System.out.println("实现功能"); } @Override public void add() { // TODO Auto-generated method stub System.out.println("实现功能"); } @Override public void update() { // TODO Auto-generated method stub System.out.println("实现功能"); } @Override public void find() { // TODO Auto-generated method stub System.out.println("实现功能"); }}
阅读全文
1 0
- java反射机制与动态代理
- Java反射机制与动态代理
- JAVA的反射机制与动态代理
- JAVA反射机制与动态代理
- java反射机制与动态代理
- java反射机制与动态代理
- java反射机制与动态代理
- JAVA的反射机制与动态代理
- JAVA反射机制与动态代理
- Java 动态代理与反射机制
- JAVA反射机制与动态代理
- JAVA反射机制与动态代理
- Java反射机制与动态代理
- Java反射机制与动态代理
- JAVA 反射机制与动态代理
- 反射机制与动态代理
- java反射机制&动态代理
- Java反射机制动态代理
- Qt On Android + protobuf3的使用
- 机器学习-学习笔记 神经网络
- OpenCV_连通区域分析(Connected Component Analysis-Labeling)
- 51nod--1137 矩阵乘法
- POJ3686: The Windy's 题解
- Java反射机制与动态代理
- shiro
- 【备战秋招Day 5】经典面试题17-20及在线编程题13-15答案
- 机器学习相关——协同过滤
- NFS配置及使用
- Redis 有序集合(sorted set)
- C++程序员学Java系列之二一:final 关键字
- Vivado HLS中指针作为Top函数参数的处理
- 手把手教你开发一款简单的AR软件