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;
}
}
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;
}
}