AOP jdk动态代理
一:
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动态代理的更多相关文章
- Spring AOP --JDK动态代理方式
我们知道Spring是通过JDK或者CGLib实现动态代理的,今天我们讨论一下JDK实现动态代理的原理. 一.简述 Spring在解析Bean的定义之后会将Bean的定义生成一个BeanDefinit ...
- Spring AOP JDK动态代理与CGLib动态代理区别
静态代理与动态代理 静态代理 代理模式 (1)代理模式是常用设计模式的一种,我们在软件设计时常用的代理一般是指静态代理,也就是在代码中显式指定的代理. (2)静态代理由 业务实现类.业务代理类 两部分 ...
- AOP学习心得&jdk动态代理与cglib比较
什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入 ...
- Spring AOP详解 、 JDK动态代理、CGLib动态代理
AOP是Aspect Oriented Programing的简称,面向切面编程.AOP适合于那些具有横切逻辑的应用:如性能监测,访问控制,事务管理以及日志记录.AOP将这些分散在各个业务逻辑中的代码 ...
- jdk动态代理与cglib代理、spring aop代理实现原理
原创声明:本博客来源与本人另一博客[http://blog.csdn.net/liaohaojian/article/details/63683317]原创作品,绝非他处摘取 代理(proxy)的定义 ...
- jdk动态代理与cglib代理、spring aop代理实现原理解析
原创声明:本博客来源为本人原创作品,绝非他处摘取,转摘请联系博主 代理(proxy)的定义:为某对象提供代理服务,拥有操作代理对象的功能,在某些情况下,当客户不想或者不能直接引用另一个对象,而代理对象 ...
- 何为代理?jdk动态代理与cglib代理、spring Aop代理原理浅析
原创声明:本博客来源为本人原创作品,绝非他处摘取,转摘请联系博主 代理(proxy)的定义:为某对象提供代理服务,拥有操作代理对象的功能,在某些情况下,当客户不想或者不能直接引用另一个对象,而代理对象 ...
- Spring AOP高级——源码实现(3)AopProxy代理对象之JDK动态代理的创建过程
spring-aop-4.3.7.RELEASE 在<Spring AOP高级——源码实现(1)动态代理技术>中介绍了两种动态代理技术,当然在Spring AOP中代理对象的生成也是运用 ...
- 【转载】Spring AOP详解 、 JDK动态代理、CGLib动态代理
Spring AOP详解 . JDK动态代理.CGLib动态代理 原文地址:https://www.cnblogs.com/kukudelaomao/p/5897893.html AOP是Aspec ...
随机推荐
- spring boot 开发 org.springframework.context.ApplicationContextException: Unable to start web server;
Error starting ApplicationContext. To display the conditions report re-run your application with 'de ...
- 【异常】redis.clients.jedis.exceptions.JedisDataException: ERR unknown command 'PSETEX'
在spring中 针对 RedisTemplate类: private RedisTemplate<String, String> template; 当调用下面方法 template.o ...
- LeetCode--066--加一
问题描述: 给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. ...
- hdu-6324-博弈
Problem F. Grab The Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Ja ...
- python 小练习 9
还记得中学时候学过的杨辉三角吗?具体的定义这里不再描述,你可以参考以下的图形: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 .............. 先 ...
- 网络SSID是什么意思
ssid是网络的ID(名称).一般用在无线网络上.搜索无线网络名一般就是在搜索无线网络的ssid. SSID是Service Set Identifier的缩写,意思是:服务集标识.SSID技术可以将 ...
- transition多个属性同时渐变(left/top)
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> < ...
- memory prefix hypo,hecto,hyper out1
1● hypo 次等 2● hecto 许多,百 3● hyper 超过,许多
- 微信小程序wx.chooseImage和wx.previewImage的综合使用(图片上传不限制最多张数)
WXML: <view class="weui"> <view class="weui-uploader"> <view clas ...
- c++多态多实例
#include <bits/stdc++.h> using namespace std; class A { public: A() { cout << "构造A& ...