在之前的cglib代理原理中(至于cglib和jdk代理的区别,看之前的博文),我们涉及到了多个切面,但是那时候说的切面,还不算真正意义上的切面(没有在spring配置文件中配置)。现在我修改一个那个例子.
需求:
我们仍然查询某一个人的薪水
需求分析:
我们直接通过目标类来查询某个人的薪水,但是在我们通过调用目标方法的时候,有各种通知在运作,就像拦截器一样,如果没有相应的权限的话,就不给查询。
通知的分析:
在以前的例子中,我们用到了3个切面,分别是privilege(权限),security(安全性框架),logger(日志),当时由于我们还没有学通知的概念,所以只是调用了一下其中的方法而已,现在我们要区分一下它们对应的方法分别属于什么通知。
日志切面和安全性框架切面对于用户的权限没有要求,只要你发送了这个请求,就要经过相应的通知,所以日志和安全性框架属于前置通知。
权限切面是需要在经过了前置通知之后,然后再判断是否满足相应的条件来决定是否让客户端执行目标方法,所以权限切面的方法属于环绕通知。
代码实现:
以下是切面的定义:
//日志切面
public class Logger {
public void logging(){
System.out.println("logging");
}
}
//安全性框架切面:
public class Security {
public void security(){
System.out.println("security");
}
}
//权限切面
public class Privilege {
//设置一个变量,并且设置其getter&setter方法,这样就可以在配置文件中赋值
private String access;
/**
* 判断用户是否为admin,如果不是,就不给查询
* @param joi