public interface PersonService {
public void save(String name);
public void update(String name, Integer personid);
public String getPersonName(Integer personid);
}
=================================
package com.icss.service.impl;
import com.icss.service.PersonService;
/**
* 1.拦截所有业务方法
* 2.判断用户是否有权限,有权限则允许执行业务方法,没有权限则不允许他执行业务方法
* (是否有权限根据user是否为null判断)
* 横切性关注点:
* @author feng@l
*2014-5-3
*/
public class PersonServiceBean implements PersonService {
private String user = null;
public PersonServiceBean(){}
public PersonServiceBean(String user) {
this.user = user;
}
public String getUser() {
return user;
}
@Override
public void save(String name) {
System.out.println("我是save()方法");
}
@Override
public void update(String name, Integer personid) {
System.out.println("我是update()方法");
}
@Override
public String getPersonName(Integer personid) {
System.out.println("我是getPersonName()方法");
return "xxx";
}
}
============================================
package com.icss.aop;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import com.icss.service.impl.PersonServiceBean;
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);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
PersonServiceBean bean = (PersonServiceBean)this.targetObject;
Object result = null;
if(bean.getUser() != null){
result = method.invoke(targetObject, args);
}
return result;
}
}
==============================================
package junit.test;
import static org.junit.Assert.*;
import org.junit.Test;
import com.icss.aop.JDKProxyFactory;
import com.icss.service.PersonService;
import com.icss.service.impl.PersonServiceBean;
public class AOPTest {
@Test
public void proxyTest() {
JDKProxyFactory factory = new JDKProxyFactory();
PersonService personService = (PersonService) factory.createProxyInstance(new PersonServiceBean("xxx"));
personService.save("feng@l");
}
}