博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用JDK中的proxy技术实现AOP功能
阅读量:5326 次
发布时间:2019-06-14

本文共 2456 字,大约阅读时间需要 8 分钟。

直接上代码,需要注意的地方已经加上注释。

接口
1 package com.proxy.service; 2 3 public interface AopService {
4 public void save(); 5 }
实现类
1 package com.proxy.service.impl;  2  3 import com.proxy.service.AopService;  4  5 public class AopServiceImpl implements AopService {
6 7 private String user = null; 8 9 public String getUser() {
10 return user; 11 } 12 13 public void setUser(String user) {
14 this.user = user; 15 } 16 17 public AopServiceImpl() {
18 } 19 20 public AopServiceImpl(String user) {
21 this.user = user; 22 } 23 24 @Override 25 public void save() {
26 System.out.println("调用了save()方法"); 27 } 28 }
代理工厂类--使用JDKproxy技术实现
1 package com.proxy.factory;  2  3 import java.lang.reflect.InvocationHandler;  4 import java.lang.reflect.Method;  5 import java.lang.reflect.Proxy;  6  7 import com.proxy.service.impl.AopServiceImpl;  8  9 public class ProxyFactory implements InvocationHandler{
10 private Object targetObject=null; 11 12 13 public Object creatObjectIntance(Object targetObject){
14 this.targetObject=targetObject; 15 //传过来的对象必须实现接口 16 //利用反射技术获取ClassLoader和interface集合 17 //最后一个参数是回调函数,我们需要在本类中实现InvocationHandler接口 然后重写invoke()方法,方法内容见下 18 return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(), this.targetObject.getClass().getInterfaces(), this); 19 } 20 21 22 @Override 23 public Object invoke(Object proxy, Method method, Object[] args) 24 throws Throwable {
25 AopServiceImpl aopService=(AopServiceImpl) this.targetObject; 26 if(aopService.getUser()!=null){
27 //判断用户名不为空就调用方法 28 return method.invoke(this.targetObject, args); 29 }else{
30 //判断用户名为空就返回空,不调用实现类中的方法 31 return null; 32 } 33 } 34 35 }
单元测试类
1 package junit.test;  2  3 import org.junit.Test;  4  5 import com.proxy.factory.ProxyFactory;  6 import com.proxy.service.AopService;  7 import com.proxy.service.impl.AopServiceImpl;  8  9 10 public class ProxyUnitTest {
11 12 @Test public void ProxyTest(){
13 ProxyFactory factory=new ProxyFactory(); 14 AopService aopService=(AopService) factory.creatObjectIntance(new AopServiceImpl()); 15 aopService.save(); 16 } 17 }

转载于:https://www.cnblogs.com/Laupaul/archive/2012/03/17/2403946.html

你可能感兴趣的文章
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
泛型子类_属性类型_重写方法类型
查看>>
eclipse-将同一个文件分屏显示
查看>>
mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法!
查看>>
对闭包的理解
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
windows编程ASCII问题
查看>>
.net webService代理类
查看>>
Code Snippet
查看>>
Node.js Express项目搭建
查看>>
zoj 1232 Adventure of Super Mario
查看>>
Oracle 序列的应用
查看>>
1201 网页基础--JavaScript(DOM)
查看>>
组合数学 UVa 11538 Chess Queen
查看>>
oracle job
查看>>
Redis常用命令
查看>>
XML学习笔记(二)-- DTD格式规范
查看>>
IOS开发学习笔记026-UITableView的使用
查看>>
[转载]电脑小绝技
查看>>