1、拦截类中所有的业务方法
2、判断用户是否有权限,有就允许执行业务方法,否则不准
PersonService.java
/** * 书本:【SSH】 * 功能:spring的aop学习 * 文件:PersonService.java * 时间:2015年3月23日08:52:08 * 作者:cutter_point */ package cn.cutter_point.service; public interface PersonService { public void save(String name); public void update(String name, Integer personid); public String getPersonName(Integer personid); }
/** * 书本:【SSH】 * 功能:spring的aop学习 * 文件:PersonServiceBean.java * 时间:2015年3月23日08:52:08 * 作者:cutter_point */ package cn.cutter_point.service.impl; import cn.cutter_point.service.PersonService; public class PersonServiceBean implements PersonService { private String user = null; public PersonServiceBean() {} public PersonServiceBean(String user) { this.user = user; } public void save(String name) { // TODO Auto-generated method stub if(user != null) { System.out.println("cutter_point save() 方法!!!"); } } public void update(String name, Integer personid) { // TODO Auto-generated method stub if(user != null) { System.out.println("cutter_point update()方法!"); } } public String getPersonName(Integer personid) { // TODO Auto-generated method stub if(user != null) { System.out.println("cutter_point getPersonName()方法!"); } return "cutter_point"; } }
这个时候jdk中有一个Proxy的类,这个类有一个方法就是创建代理实例的,其中这个方法有三个参数。
1、类的装载器
2、要实现的接口
3、回调的接口实现,拦截到方法之后会触发这个类
<pre name="code" class="java">/** * 书本:【SSH】 * 功能:spring的aop学习 * 文件:JDKProxyFactory.java * 时间:2015年3月23日09:26:03 * 作者:cutter_point */ package cn.aop; import java.lang.reflect.Proxy; public class JDKProxyFactory { public Object targetObject; //目标对象 private ProxyWays pw; //实现拦截方法处理 public Object createProxyIntance(Object targetObject) { this.targetObject = targetObject; pw = new ProxyWays(targetObject); //返回一个代理实例,类装载器,要拦截的接口,方法, 拦截之后执行的方法 return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(), this.targetObject.getClass().getInterfaces(), pw); } }
/** * 书本:【SSH】 * 功能:spring的aop学习,拦截到对象之后要执行的方法 * 文件:ProxyWays.java * 时间:2015年3月23日09:26:03 * 作者:cutter_point */ package cn.aop; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import cn.cutter_point.service.impl.PersonServiceBean; public class ProxyWays implements InvocationHandler { Object targetObject; public ProxyWays(Object targetObject) { this.targetObject = targetObject; } @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.BeforeClass; import org.junit.Test; import cn.aop.JDKProxyFactory; import cn.cutter_point.service.PersonService; import cn.cutter_point.service.impl.PersonServiceBean; public class AOPTest { @BeforeClass public static void setUpBeforeClass() throws Exception {} @Test public void test() { //fail("Not yet implemented"); JDKProxyFactory factory = new JDKProxyFactory(); //创建一个代理工厂 PersonService service = (PersonService) factory.createProxyIntance(new PersonServiceBean("cutter")); service.save("point"); } }
原文:http://blog.csdn.net/cutter_point/article/details/44559139