使用JDK中的Proxy技术实现AOP功能

来源:互联网 发布:java 类构造器 编辑:程序博客网 时间:2024/05/16 12:04

PersonServiceBean.java
package com.allen.service.imp;import com.allen.service.PersonService;public class PersonServiceBean implements PersonService {public String user = "";public String getUser() {return user;}public PersonServiceBean(){}public PersonServiceBean(String user){this.user=user;}        @Overridepublic String getPersonName(Integer personid) {System.out.println("我是getPersonName()");return "AAAAA";}       @Overridepublic void save(String name) {System.out.println("我是Save()");}        @Overridepublic void update(String name) {System.out.println("我是update()");}}


PersonService.java

package com.allen.service;public interface PersonService {    public void save (String name);    public void update(String name);    public String getPersonName(Integer personid);}

JDKProxyFactory.java

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


这是测试用的 junit4
AopTest.java

package junit.test;import org.junit.BeforeClass;import org.junit.Test;import com.allen.aop.CGLibFactory;import com.allen.aop.JDKProxyFactory;import com.allen.service.PersonService;import com.allen.service.imp.PersonServiceBean;public class AopTest {@BeforeClasspublic static void setUpBeforeClass() throws Exception {}@Test public void proxyTest(){JDKProxyFactory factory = new JDKProxyFactory();PersonService service = (PersonService) factory.createProxyIntance(new PersonServiceBean("asf"));service.save("888");}}


不管评论什么 我都接受!!!






原创粉丝点击