Spring中的AOP技术实际上就是Struts2中的拦截器,只不过针对的对象不同,
Spring中的AOP技术: 拦截业务层的方法
Struts2中的拦截器: 拦截Action中的请求
我们先来模拟一个业务需求
UserService:
public interface UserService { public void create(); public void update(); public void delete(); } |
UserServiceImpl:
public class UserServiceImpl implements UserService { private String user;
public UserServiceImpl() { super(); }
public UserServiceImpl(String user) { super(); this.user = user; }
@Override public void create() { System.out.println("create方法执行"); }
@Override public void delete() { System.out.println("delete方法执行"); }
@Override public void update() { System.out.println("update方法执行"); } } |
可以看到服务层实现类中有一个持有User对象,我们现在的要求是如果用户为null,则没有权限调用create,update,delete这些方法,如果不为空则可以调用.
最原始的方法,我们可以这样做:
private String user;
public UserServiceImpl() { super(); }
public UserServiceImpl(String user) { super(); this.user = user; }
@Override public void create() { if(user != null){ System.out.println("create方法执行"); } }
@Override public void delete() { if(user != null){ System.out.println("delete方法执行"); } }
@Override public void update() { if(user != null){ System.out.println("update方法执行"); } } } |
这叫硬编码,灵活性差,如果一但权限需求发生改变,一动则全身都得动,如果非常庞大的系统,有几百个业务层的类,都需要进行权限拦截,那不是每个方法都得加上判断语句,可以想像一下,如果日后需求发生变更,修改程序是多么恐怖的一件事情.这个时候我们肯定得想办法将这些相同的代码(这里是判断语句)抽取出来.
下面我们先来看一下JDK中(不使用任何框架)对AOP的一个支持.
那这个时候我们需要先来了解一下代理模式,代理模式有点像经纪人的味道.
比如: 企业找明星代言产品.
企业 à