接口:
public interface IUserService { public void saveUser(String username,String password);
public void updateUser(String username,String password);
public void deleteUser(String username);
public String findUser();
}
目标对象:
public class UserServiceImpl implements IUserService { @Override
public void saveUser(String username, String password) {
System.out.println("保存用户【"+username+"】,密码是【"+password+"】");
} @Override
public void updateUser(String username, String password) {
System.out.println("更新用户【"+username+"】,密码是【"+password+"】");
} @Override
public void deleteUser(String username) {
System.out.println("删除用户【"+username+"】");
} @Override
public String findUser() {
System.out.println("查询用户,返回王老五");
return "王老五";
} }
代理对象:
public class JdkDaili implements InvocationHandler{
Object userServiceImpl;
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
ffff
if (method.getName()!=null&&(method.getName().contains("save")||method.getName().contains("update"))) {
            jiaoyan();
            System.out.println(proxy.getClass());
            System.out.println(method.getName());
            if (args.length>0&&args!=null) {
                for (Object object : args) {
                    System.out.println(object);
                }
            }
        }
object o=method.invoke(userServiceImpl, args);//放在此处是,先执行代理,在执行目标对象的方法,如果想后执行代理,需要把这句话放入黄色区域
return o;
} public Object createrDaiLi(Object userServiceImpl) {
this.userServiceImpl=userServiceImpl;
return Proxy.newProxyInstance(this.userServiceImpl.getClass().getClassLoader(), this.userServiceImpl.getClass().getInterfaces(), this );
} } 测试:
public static void main(String[] args) { //需求:在访问保存和更新的方法之前,先让你执行一个校验,使用代理对象完成 JdkDaili jdkDaili=new JdkDaili();
//用目标对象创建代理对象
IUserService iService=(IUserService) jdkDaili.createrDaiLi(new UserServiceImpl());
//代理对象执行 代理类里面的invoke()方法,返回return method.invoke(目标对象, 目标对象的方法的参数);
iService.saveUser("hgiohr", "51684");
}

jdk代理的更多相关文章

  1. aop测试jdk代理机制

    //测试jdk代理机制 @Test public void testProxy(){ final UsbDisk usbDisk = new UsbDisk(); //类加载器,接口,匿名内部类 // ...

  2. 实现一个JDK代理demo

    JDK代理,非常简单地实现了动态代理(首先是实现对应的InvocationHandler:然后,以接口来为被调用目标构建代理对象,代理对象简介运行调用目标,并提供额外逻辑插入) 缺点:它是只能以接口为 ...

  3. jdk代理与cglib代理

    1. jdk静态代理 jdk静态代理主要使用硬编码实现.他通过对在代理类中持有委托类的引用,来打到在委托类方法执行前和执行后进行处理,实现简单,容易理解. 代码如下: 1.业务逻辑接口 package ...

  4. Java动态代理 ----- jdk代理与cglib代理

    1.jdk代理 针对接口进行代理,接口可以没有方法, InvocationHandler会拦截所有方法,不过好像意义不大....只能执行Object类的方法,执行结果有点奇怪... package t ...

  5. 性能优于JDK代理,CGLib如何实现动态代理

    按照代理的创建时期,代理类可以分为两种. 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译.在程序运行前,代理类的.class文件就已经存在了. 动态代理:在程序运行时,运用反射机制动态创建 ...

  6. Spring事务Transactional和动态代理(一)-JDK代理实现

    系列文章索引: Spring事务Transactional和动态代理(一)-JDK代理实现 Spring事务Transactional和动态代理(二)-cglib动态代理 Spring事务Transa ...

  7. java代理,静态代理、jdk代理、cglib代理、Aspectj

    我实在接触spring的时候才接触到代理这个东西的,一直想整理一下笔记. 什么是代理模式:代理模式是通过代理对象访问目标对象,这样可以在目标对象基础上增强额外的功能.简单来说就是要创建一个新的对象,我 ...

  8. Spring框架系列(12) - Spring AOP实现原理详解之JDK代理实现

    上文我们学习了SpringAOP Cglib动态代理的实现,本文主要是SpringAOP JDK动态代理的案例和实现部分.@pdai Spring框架系列(12) - Spring AOP实现原理详解 ...

  9. CGLIB和JDK代理

    需要的架包:在spring中提供对CGLIB的支持 一.JDK的动态代理 1.接口IUserDao package cn.itcast.spring3.jdk.proxy; public interf ...

  10. 面向切面编程之手动JDK代理方式

    需求描述: 抽取dao层开启和提交事物交由代理类一并执行 分析: 假如UserDao接口中有很多方法,例如addUser().deleteUser().updateUser()等等,需要频繁的和数据库 ...

随机推荐

  1. Azure自动化部署服务 (1)

    Azure中已经发布了自动化部署服务的PaaS功能. 本文将介绍自动化服务Automation初始化过程. 在Azure Management Portal上左边可以看到Azure的各种服务,其中一项 ...

  2. 统计不同的单词(map应用)

    题目描述: 输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另一个单词.在判断是否满足条件时,字母不区分大小写,但在输出时应保留输入中的大小写,按字典序进行排列(所有 ...

  3. css菜鸟学习之block,inline和inline-block概念和区别

    block,inline和inline-block概念和区别   总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-level elements (块级元素) ...

  4. 问题:oracle ROW_NUMBER()over;结果: ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法

    ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法 ROW_NUMBER() OVER(partition by col1 order by col2) 表示根据col1分组, ...

  5. 决策树算法原理及JAVA实现(ID3)

    0 引言 决策树的目的在于构造一颗树像下面这样的树. 图1 图2 1. 如何构造呢? 1.1   参考资料.       本例以图2为例,并参考了以下资料. (1) http://www.cnblog ...

  6. RStudio 断点调试 进入for循环语句调试

    参考: http://www.rstudio.com/ide/docs/debugging/overview 1.进入调试模式 全选代码,点击source即可进入调试模式. 2.进入for 调试 在F ...

  7. Entity Framework Code-First(12):Configure One-to-Many

    Configure One-to-Many Relationship: Here, we will learn how to configure One-to-Many relationship be ...

  8. js 使用中一些需要提醒的点

    1.js 中可以直接使用输出java 变量 <script> var path = '<%=basePath%>'; 2.js重新注册事件后,如何让事件不自动执行? mzTxt ...

  9. cygwin主要命令

    基本操作命令: ---------------------------------------------------------------------- --------------------- ...

  10. kali linux学习笔记之系统定制及优化(附:中文输入法设置)

    fix update flash plugin on kali rolling author:@kerker 0x00设置软件源 root@kali:~# vim /etc/apt/sources.l ...