一:

jdk动态代理是Spring AOP默认的代理方法。要求 被代理类要实现接口,只有接口里的方法才能被代理,主要步骤是先创建接口,接口里创建要被代理的方法,然后定义一个实现类实现该接口,接着将被代理对象注入到一个中间对象,中间对象实现InvocationHandler接口,实现该接口可以在 被代理对象调用它的方法前后插入一些代码。Proxy.newProxyInstance()能利用中间对象来生产代理对象。

二:

(1)创建接口:

package net.wang.aop;

/**
* 被代理对象必须实现的接口
* @author LiuRuoWang
*/
public interface UserService { public void addUser(User user); public User getUser(int id);
}

(2)创建实现类:

package net.wang.aop;

/**
* 被代理对象,必须实现接口
* @author LiuRuoWang
*/
public class UserServiceImpl implements UserService{ public void addUser(User user) {
System.out.println("add User!");
} public User getUser(int id) {
User user=new User();
user.setId(id);
System.out.println("get User!");
return user;
} }

(3)创建代理中间类

package net.wang.aop;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method; /**
* 代理中间类
* @author LiuRuoWang
*/
public class ProxyUtil implements InvocationHandler{ //被代理对象
private Object target; public void setTarget(Object target) {
this.target = target;
} public Object getTarget() {
return target;
} public ProxyUtil(Object target){
this.target=target;
} public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("do sth before!");
method.invoke(target, args);
System.out.println("do sth after!");
return null;
} }

(4)pojo类:

package net.wang.aop;

/**
* User pojo类
* @author LiuRuoWang
*/
public class User { private Integer id; private String name; public void setId(Integer id) {
this.id = id;
} public Integer getId() {
return id;
} public void setName(String name) {
this.name = name;
} public String getName() {
return name;
}
}

(5)测试结果

package net.wang.aop;

import java.lang.reflect.Proxy;

public class ProxyTest {

	public static void main(String[] args) {

		Object proxyedObject = new UserServiceImpl();

		ProxyUtil proxyUtils = new ProxyUtil(proxyedObject);
//生成代理对象,并对这些接口进行代理
UserService proxyObject = (UserService) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
UserServiceImpl.class.getInterfaces(),proxyUtils);
proxyObject.getUser(1);
proxyObject.addUser(new User());
}
}

(6)

AOP jdk动态代理的更多相关文章

  1. Spring AOP --JDK动态代理方式

    我们知道Spring是通过JDK或者CGLib实现动态代理的,今天我们讨论一下JDK实现动态代理的原理. 一.简述 Spring在解析Bean的定义之后会将Bean的定义生成一个BeanDefinit ...

  2. Spring AOP JDK动态代理与CGLib动态代理区别

    静态代理与动态代理 静态代理 代理模式 (1)代理模式是常用设计模式的一种,我们在软件设计时常用的代理一般是指静态代理,也就是在代码中显式指定的代理. (2)静态代理由 业务实现类.业务代理类 两部分 ...

  3. AOP学习心得&jdk动态代理与cglib比较

    什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入 ...

  4. Spring AOP详解 、 JDK动态代理、CGLib动态代理

    AOP是Aspect Oriented Programing的简称,面向切面编程.AOP适合于那些具有横切逻辑的应用:如性能监测,访问控制,事务管理以及日志记录.AOP将这些分散在各个业务逻辑中的代码 ...

  5. jdk动态代理与cglib代理、spring aop代理实现原理

    原创声明:本博客来源与本人另一博客[http://blog.csdn.net/liaohaojian/article/details/63683317]原创作品,绝非他处摘取 代理(proxy)的定义 ...

  6. jdk动态代理与cglib代理、spring aop代理实现原理解析

    原创声明:本博客来源为本人原创作品,绝非他处摘取,转摘请联系博主 代理(proxy)的定义:为某对象提供代理服务,拥有操作代理对象的功能,在某些情况下,当客户不想或者不能直接引用另一个对象,而代理对象 ...

  7. 何为代理?jdk动态代理与cglib代理、spring Aop代理原理浅析

    原创声明:本博客来源为本人原创作品,绝非他处摘取,转摘请联系博主 代理(proxy)的定义:为某对象提供代理服务,拥有操作代理对象的功能,在某些情况下,当客户不想或者不能直接引用另一个对象,而代理对象 ...

  8. Spring AOP高级——源码实现(3)AopProxy代理对象之JDK动态代理的创建过程

    spring-aop-4.3.7.RELEASE  在<Spring AOP高级——源码实现(1)动态代理技术>中介绍了两种动态代理技术,当然在Spring AOP中代理对象的生成也是运用 ...

  9. 【转载】Spring AOP详解 、 JDK动态代理、CGLib动态代理

    Spring AOP详解 . JDK动态代理.CGLib动态代理  原文地址:https://www.cnblogs.com/kukudelaomao/p/5897893.html AOP是Aspec ...

随机推荐

  1. 《Blue Flke》团队项目需求改进与系统设计

    Github地址:https://github.com/13993013291/ruanjianguigexuqiu/tree/master 一.团队项目需求分析改进 1.<通讯录管理系统需求说 ...

  2. LeetCode--110--平衡二叉树

    问题描述: 给定一个二叉树,判断它是否是高度平衡的二叉树. 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1. 示例 1: 给定二叉树 [3,9,20,n ...

  3. CF1082G Petya and Graph

    题意 定义图权 = 图中边权总和 - 图中点权总和(空图的图权=0),求 n 个点 m 条边的无向图最大权子图. 把边看成点,这个点与两个原图中的点连边.直接最小割求最大闭合子图即可.

  4. 悟空CRM框架下载模板

    1.你可以把你要下载的模板放在这个项目的Public/excelmodel目录下,然后你就可以在页面中编写代码 你可以在下载按钮这里编写:onclick="window.location.h ...

  5. [LeetCode] 268. Missing Number ☆(丢失的数字)

    转载:http://www.cnblogs.com/grandyang/p/4756677.html Given an array containing n distinct numbers take ...

  6. UVALive 5881

    DES:给出一个数列.然后有q个询问,对给定的区间内是否有重复的数.如果有输出任意一个重复的.如果没有输出OK. 开始以为是线段树.后来发现.只是水的比较隐蔽.感觉这个方法还是很聪明的.把每个点的最近 ...

  7. pyinstaller又踩一坑, configparser os.mknod

    在使用pyinstaller时,有使用configparser模块. 使用相对路径.在pycharm中测试,正常,打包成exe,就出错了 换用绝对路径, print(os.getcwd()) fp_d ...

  8. 经典T-SQL代码

    1. N到M条记录(要有主索引ID)SelectTop M-N *From [Table] Where ID in (SelectTop M ID From [Table]) Orderby ID  ...

  9. 注解实现struts2零配置

    零配置指的是不经过配置文件struts.xml配置Action 首先:导入jar   struts2-convention-plugin-2.3.24.1.jar package com.action ...

  10. Final阶段第1周/共1周 Scrum立会报告+燃尽图 03

    作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2482] 版本控制:https://git.coding.net/liuyy08 ...