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()等等,需要频繁的和数据库 ...
随机推荐
- altium designer 中的top/bottom solder和top/bottom paste mask
转载请注明出处:http://blog.csdn.net/qq_26093511/article/details/51751936 1.top solder为助焊层,说白一点就是说,有这个层的地方就没 ...
- 自定义滚动条jQuery插件- Perfect Scrollbar
主要特性: 不需要修改任何的元素的css 滚动条不影响最初的页面布局设计 滚动条支持完整的自定义 滚动条的尺寸和位置会随着容器尺寸或者内容的变化而变化 依赖于jQuery和相关几个类库 不需要定义宽度 ...
- SpringMvc之参数绑定注解详解之一
引言: 前段时间项目中用到了REST风格来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没有加 任何注解),查看了提交方式为application/ ...
- new LayoutParams 使用
ImageView imageView = new ImageView(mcontext); LayoutParams layoutParams = new LayoutParams(150,130) ...
- 【总结整理】JQuery基础学习---DOM篇
前言: 先介绍下需要用到的浏览器提供的一些原生的方法(这里不处理低版本的IE兼容问题) 创建流程比较简单,大体如下: 创建节点(常见的:元素.属性和文本) 添加节点的一些属性 加入到文档中 流程中涉及 ...
- 第八篇 elasticsearch链接mysql自动更新数据库
增量更新 input { jdbc { jdbc_driver_library => "D:\tools\mysql\mysql-connector-java-5.1.45/mysql ...
- Ubuntu 解决:当执行`sudo apt-get update`命令时 出现的 “apt-get 404 Not Found Package Repository Errors” 问题
Ubuntu 解决:当执行sudo apt-get update或者sudo apt-get install命令是出现的 "apt-get 404 Not Found Package Rep ...
- Jmeter JDBC Request的sql语句不支持;号
Jmeter JDBC Request的sql语句不支持:号,如果要批量插入数据,则需要使用以下方式 INSERT INTO bank_info( `id`, `bank_code`, `bank_n ...
- 我的笔记文档版本控制系统-MediaWiki-目录悬浮+隐藏
13年11份把北京的工作辞了,出去从北到南找同学玩了二十多天,因为各种原因,回家(宁夏)找工作,想找一个Linux相关的工作,但涉及Linux的都是运维.支持一类,最后因为各种原因找了个做java的本 ...
- ps -ef | grep java 输出的具体含义是什么?
uid pid ppid # PID 这个程序的 ID 下面的 PPID 则是父程序的 ID: PS是LINUX下最常用的也是非常强大的进程查看命令 常见的使用方法是检查一个进 ...