利用反射来实现动态代理

实现动态代理,在mybaties中,不需要实现类框架帮创建,只需要

有一个dao接口就OK了

dao接口类

public interface UserDao {
public void save();
public void delete();
public void uodate();
}

实现类,只有增删该查方法

public class UserDaoImp implements UserDao {
@Override
public void save() {
System.out.println("保存的方法");
}
@Override
public void delete() {
System.out.println("删除的方法");
}

@Override
public void uodate() {
System.out.println("更新的方法");
}
}

proxy代理工厂,用来创建代理类,可以在增删该查之前之后添加功能,利用反射可以生成多个,

public class TestProxy implements InvocationHandler{
//记录了委托类对象即接口类
private Object obj;
//得到代理类对象
public Object getproxyObject(Object obj){
this.obj=obj;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("代理调用"+method.getName()+"开始");
//自动调用委托类的方法,Method method 委托类的update,delete,方法自动调用
Object result = method.invoke(obj, args);
System.out.println(result);
System.out.println("代理调用结束");

return result;
}

测试类

public class Test {
public static void main(String[] args) {
UserDao userDao=new UserDaoImp();
TestProxy factory =new TestProxy();
UserDao userproxy = (UserDao) factory.getproxyObject(userDao);
userproxy.save();
userproxy.delete();
userproxy.uodate();
}
}

时间: 2024-11-05 12:09:53

利用反射来实现动态代理的相关文章

java反射机制与动态代理

在学习HadoopRPC时,用到了函数调用,函数调用都是采用的java的反射机制和动态代理来实现的,所以现在回顾下java的反射和动态代理的相关知识. 一.反射 JAVA反射机制定义: JAVA反射机制是java程序在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 反射就是把Java类中的各种成分映射成相应的Java类. Java反射机制主要提供了以下功能: 1

简谈Java 反射机制,动态代理

谈谈 Java 反射机制,动态代理是基于什么原理?小编整理了一些java进阶学习资料和面试题,需要资料的请加JAVA高阶学习Q群:701136382 这是小编创建的java高阶学习交流群,加群一起交流学习深造.群里也有小编整理的2019年最新最全的java高阶学习资料! 反射机制 Java 语言提供的一种基础功能,赋予程序在运行时自省(introspect,官方用语)的能力.可以在运行时通过提供完整的"包名+类名.class"得到某个对象的类型. 功能 在运行时能判断任意一个对象所属的

类的加载机制和反射——五、使用反射生成JDK动态代理

使用反射生成JDK动态代理 1.使用Proxy和InvocationHandler创建动态代理 (1)Proxy提供了用于创建动态代理类和动态代理对象的静态方法,他也是所有动态代理类的父类. (2)如果在程序中为一个或多个接口动态的生成实现类,就可以使用Proxy来创建动态代理类,如果需要为一个或多个接口动态的创建实例,也可以使用Proxy来创建动态代理实例. (3)Proxy提供了两个方法来创建动态代理类和动态实例: 1)static Class<?> getProxyClass(Class

Java的反射机制和动态代理

介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大的功能,可以原生实现AOP中 的方法拦截功能.正如英文单词reflection的含义一样,使用反射API的时候就好像在看一个Java类在水中的倒影一样.知道了Java类的内部 结构之后,就可以与它进行交互,包括创建新的对象和调用对象中的方法等.这种交互方式与直接在源代码中使用的效果是相同的,但是又额外提供了运行时

Java反射—运用反射生成jdk动态代理

1.  核心类&接口 在Java的java.lang.reflect包下提供一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口可以生成jdk动态代理类或动态代理对象. Proxy是所有动态代理类的父类,它提供了两个静态方法来创建动态代理类和动态代理对象,如下: ?  static Class<?> getProxyClass(ClassLoader loader, Class<?>... interfaces) ?  static Objec

MyBATIS插件原理第一篇——技术基础(反射和JDK动态代理)(转)

在介绍MyBATIS插件原理前我们需要先学习一下一些基础的知识,否则我们是很难理解MyBATIS的运行原理和插件原理的. MyBATIS最主要的是反射和动态代理技术,让我们首先先熟悉它们. 1:Java反射技术 在Java中反射技术已经大行其道,通过不断的优化性能得到了巨大的提高,而反射技术使得Java的可配置性大大提高.让我们来写一个服务打印hello + 姓名. import java.lang.reflect.InvocationTargetException; import java.l

Java中的动态反射机制和动态代理

一.什么是反射机制? 在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制.简单来说,就是Java对每一个类和类中的所有成员都进行了封装,这样每个类都有一个与之对应的Class对象,通过这个对象可以直接访问类中的所有成员. 二.Class类 1.在一个Class类中,将被封装类的方法(构造器之外)封装为Method类,将字段封装为Filed类,将构造器封装为Co

java核心学习(四十) 使用反射生成JDK动态代理

java.lang.reflect包下提供了一个Proxy类和InvocationHandler接口,用于生成动态代理类和动态代理对象. 一.使用Proxy.InvocationHandler创建动态代理 这里要注意,在java.net包下也有一个Proxy类,不过这个类是用于设置代理服务器的,莫混淆.. Proxy提供了如下两个方法创建动态代理类和动态代理实例: 实际上即使采用第一种方法创建动态代理类,如果程序需要通过该代理类来创建对象,依然需要传入一个InvocationHandler对象,

反射实现AOP动态代理模式(Spring AOP实现原理)

其实AOP的意思就是面向切面编程. OO注重的是我们解决问题的方法(封装成Method),而AOP注重的是许多解决问题的方法中的共同点,是对OO思想的一种补充! 还是拿人家经常举的一个例子讲解一下吧: 比如说,我们现在要开发的一个应用里面有很多的业务方法,但是,我们现在要对这个方法的执行做全面监控,或部分监控.也许我们就会在要一些方法前去加上一条日志记录. 我们写个例子看看我们最简单的解决方案 我们先写一个接口IHello.java代码如下: package sinosoft.dj.aop.st