jdk代理
接口:
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代理的更多相关文章
- aop测试jdk代理机制
//测试jdk代理机制 @Test public void testProxy(){ final UsbDisk usbDisk = new UsbDisk(); //类加载器,接口,匿名内部类 // ...
- 实现一个JDK代理demo
JDK代理,非常简单地实现了动态代理(首先是实现对应的InvocationHandler:然后,以接口来为被调用目标构建代理对象,代理对象简介运行调用目标,并提供额外逻辑插入) 缺点:它是只能以接口为 ...
- jdk代理与cglib代理
1. jdk静态代理 jdk静态代理主要使用硬编码实现.他通过对在代理类中持有委托类的引用,来打到在委托类方法执行前和执行后进行处理,实现简单,容易理解. 代码如下: 1.业务逻辑接口 package ...
- Java动态代理 ----- jdk代理与cglib代理
1.jdk代理 针对接口进行代理,接口可以没有方法, InvocationHandler会拦截所有方法,不过好像意义不大....只能执行Object类的方法,执行结果有点奇怪... package t ...
- 性能优于JDK代理,CGLib如何实现动态代理
按照代理的创建时期,代理类可以分为两种. 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译.在程序运行前,代理类的.class文件就已经存在了. 动态代理:在程序运行时,运用反射机制动态创建 ...
- Spring事务Transactional和动态代理(一)-JDK代理实现
系列文章索引: Spring事务Transactional和动态代理(一)-JDK代理实现 Spring事务Transactional和动态代理(二)-cglib动态代理 Spring事务Transa ...
- java代理,静态代理、jdk代理、cglib代理、Aspectj
我实在接触spring的时候才接触到代理这个东西的,一直想整理一下笔记. 什么是代理模式:代理模式是通过代理对象访问目标对象,这样可以在目标对象基础上增强额外的功能.简单来说就是要创建一个新的对象,我 ...
- Spring框架系列(12) - Spring AOP实现原理详解之JDK代理实现
上文我们学习了SpringAOP Cglib动态代理的实现,本文主要是SpringAOP JDK动态代理的案例和实现部分.@pdai Spring框架系列(12) - Spring AOP实现原理详解 ...
- CGLIB和JDK代理
需要的架包:在spring中提供对CGLIB的支持 一.JDK的动态代理 1.接口IUserDao package cn.itcast.spring3.jdk.proxy; public interf ...
- 面向切面编程之手动JDK代理方式
需求描述: 抽取dao层开启和提交事物交由代理类一并执行 分析: 假如UserDao接口中有很多方法,例如addUser().deleteUser().updateUser()等等,需要频繁的和数据库 ...
随机推荐
- shock编程
Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序.要学Internet上的TCP/IP网络编程,必须理解Socket ...
- Python:sample函数
sample(序列a,n) 功能:从序列a中随机抽取n个元素,并将n个元素生以list形式返回. 例: from random import randint, sample date = [randi ...
- 开发框架:AdminLTE
ylbtech-开发框架:AdminLTE 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 1. 2. 5.返回顶部 1. https://adminlte.io 2. 6.返 ...
- javadoc 工具生成开发API文档
=====================先来一点成就感===================== package com.springMybatis.dao; import com.springMy ...
- 你所必须知道的HTML
只有在MySQL中可以使用"utf-8"的别名"utf8",但是在其他地方一律使用大写"UTF-8". htm 与 html 的区别 两种 ...
- 7、sraToolkit安装使用
参考:http://blog.csdn.net/Cs_mary/article/details/78378552 ###prefetch 参数解释 https://www.ncbi.nl ...
- java之字符
参考http://how2j.cn/k/number-string/number-string-character/323.html 保存一个字符的时候使用char package character ...
- JavaScript学习系列5 ---ES6中的var, let 和const
我们都知道JavaScript中的var,在本系列的 JavaScript学习系列2一JavaScript中的变量作用域 中,我们详细阐述了var声明的变量的作用域 文章中提到,JavaScript中 ...
- 11. CTF综合靶机渗透(四)
运行环境 Virtualbox (二选一) Vnware Workstation player 通关提示 Enumeration is key Try Harder Look in front of ...
- hdu1076
#include<iostream> using namespace std; int main() { int cases; int k; cin>>cases; while ...