JDK中Proxy实现切面编程

来源:互联网 发布:手机淘宝退货在哪里 编辑:程序博客网 时间:2024/06/05 18:30

切面编程:对类中的方法设置权限

JDK中Proxy实现AOP举例

PersonService.java

package com.aop.service;public interface PersonService {public String getUser();public void save();public void update();}


PersonServiceImpl.java

package com.aop.service.impl;import com.aop.service.PersonService;public class PersonServiceImpl implements PersonService{private String user = null;public PersonServiceImpl() {}public PersonServiceImpl(String user){this.user = user;}public String getUser() {return user;}public void save() {System.out.println("save()");}public void update() {System.out.println("update()");}}

JDKProxyFactory.java

package com.aop.factory;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import com.aop.service.impl.PersonServiceImpl;public class JDKProxyFactory implements InvocationHandler {private Object targetObject;public Object createProxyInstance(Object targetObject){this.targetObject = targetObject;return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(),this.targetObject.getClass().getInterfaces(), this);}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {PersonServiceImpl service = (PersonServiceImpl) this.targetObject;Object result = null;if(service.getUser() != null){result = method.invoke(targetObject, args);}return result;}}

测试类:AOPTest.java

package com.aop.junit;import com.aop.factory.JDKProxyFactory;import com.aop.service.PersonService;import com.aop.service.impl.PersonServiceImpl;public class AOPTest {public static void main(String[] args) {JDKProxyFactory factory = new JDKProxyFactory();PersonService service = (PersonService) factory.createProxyInstance(new PersonServiceImpl());service.save();}}