热线电话 13988999988
首页
关于我们
产品中心
永利直营网站
成功案例
永利线上娱乐官方网站
澳门永利皇宫酒店
在线留言
联系我们
网站公告永利直营网站_澳门永利皇宫酒店_永利线上娱乐官方网站

如何使用动态代理实现Java面向切面编程

发布时间:2019-05-21 00:16

ProxyFactory factory = new ProxyFactory();

PersonService psersonServiceBean = new PersonServiceBean();

import java.lang.reflect.Method;

.getInterfaces(), this);

import com.lqw.service.impl.PersonServiceBean;

}}

public interface PersonService {

service.aoptest();}}

this.tarjectObject = obj;

@Override

public void p(Object o) {

在一个类中每个函数都需要判断用户是否是有权限对要调用的函数进行操作的。那么,可以知道,这个判断的操作是公共的,可以把这个判断的操作提取出来。

import com.lqw.service.impl.PersonServiceBean;

if (serviceBean.getUser() != null) {

下面我们写代理类的实现:

import java.lang.reflect.Proxy;

Object result = null;

System.out.println(o);

super();

public class ProxyFactory implements InvocationHandler {

public abstract void aoptest();

return user;

代理类中invoke函数主要的功能就是进行用户判断。这里比较简单,单纯是判断是否为null,不为null,就可以去执行想要调用的函数了。

接口实现类(也就是我们要代理的类,把其中的每一个方法<这里只写一个aoptest方法>的用户权限判断使用aop的思想提取出来)如下:

private Object tarjectObject;

result = method.invoke(serviceBean, args);

PersonServiceBean serviceBean = (PersonServiceBean) this.tarjectObject;

public Object creatProxyInstance(Object obj) {

.getClassLoader(), this.tarjectObject.getClass()

}

解耦是程序员编码开发过程中一直追求的,AOP(面向切面编程)也是为了解耦所诞生的,那么如何使用动态代理实现Java面向切面编程呢?今天华清远见Java学院就和大家分享下使用动态代理实现Java面向切面编程的具体方法。

PersonService service=(PersonService)factory.creatProxyInstance(psersonServiceBean);

public String getUser() {

}

}

}

测试类如下:

this.user = user;

}

public PersonServiceBean(String user) {

public class test {

this.user = user;

import com.lqw.proxy.ProxyFactory;

public static void main(String[] args) {

public void setUser(String user) {

import java.lang.reflect.InvocationHandler;

public PersonServiceBean() {

使用Proxy的前提知识是,将要被代理的类必须是实现了一些接口的类。

public Object invoke(Object proxy, Method method, Object[] args)

我们使用下面的接口:

return Proxy.newProxyInstance(this.tarjectObject.getClass()

p("aoptest()函数被调用");

private String user=null;

throws Throwable {

public class PersonServiceBean implements PersonService {

super();

return result;}}

每一次执行service调用aoptest函数的时候,代理类中的invoke函数都会被调用来判断用户是否有调用的权限,这样就做到了将用户权限判断从原来的代码中分离出来,做到了aop的面向切面编程的思想。

}

import com.lqw.service.PersonService;

}

public void aoptest() {

import com.lqw.service.PersonService;

}