使用JDK的proxy实现Aop的功能

1、模拟Aop拦截所有类方法
2、判断用户是否有权限,有权限就允许操作该类方法,没有权限不允许操作该类方法
(只是一个模拟,根据用户名是否为null判断是否有权限)

横切性关注点(proxy) 使用JDK的proxy的业务类必须实现接口

下载给一个demo,已经测试通过
步骤:
1、先写好业务类型和业务类实现的接口
这里接口的代码
package cn.tuletech.service;

public interface StudentService {

public String getUsername();

public void delete();

public void getUser();

}
实现接口的代码
package cn.tuletech.service.impl;
import cn.tuletech.service.StudentService;

public class StudentServiceBean implements StudentService {
private String username = null ;
public StudentServiceBean(){}

public String getUsername() {
return username;
}

public StudentServiceBean(String username){
this.username = username;
}

public void delete(){
System.out.println("删除成功");
}

public void getUser(){
System.out.println(this.username);
System.out.println("获取用户名");
}
}
2、编写Proxy工厂
package cn.tuletech.util;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import cn.tuletech.service.StudentService;

public class ProxyFactory implements InvocationHandler{
public Object targetObject;
/**
* Object 接口对象
* @param targetObject 目标对象
* @return
*/
public Object createProxyObject(Object targetObject){
this.targetObject = targetObject;
/**
* this.targetObject.getClass().getClassLoader() 目标装载类
* this.targetObject.getClass().getInterfaces() 目标对象实现的接口
* this 表示回调 这个类
*/
return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(), this.targetObject.getClass().getInterfaces(),this);

}
/**
* this.targetObject对象调用自己的方法时,执行invoke函数,满足条件返回this.targetObject对象,继续执行所调用的方法
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
StudentService service = (StudentService) targetObject;
Object result = null;
if(service.getUsername()!=null){
result = method.invoke(this.targetObject, args);//把对象和方法
}
return result;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值