【Spring】————AOP详解(五)

小编最近学习spring Aop,对一下基础做了一个总结,以前写的这篇文章SpringBoot——AOP处理请求日志是对日志处理的一个实现。读者们可以先了解一下。

【AOP】

AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子。

【基本概念】



1、Corss Cutting Concern:一种独立服务,它遍布在系统的处理流程之中

2、Aspect(切面):对横切性关注点的模块化,通常是一个类,里面可以定义切入点和通知

3、Advice(通知):对横切性关注点的实现,AOP在特定的切入点上执行的增强处理,有before,after,afterReturning,afterThrowing,around

4、Pointcut(切入点):定义了那些Advice应用到那些JoinPoint上,对Spring来说是方法调用

5、Weave:将Advice应用到Target Object上的过程叫织入,Spring支持的是动态织入

6、Target Object:Advice被应用的对象

7、Proxy:Spring AOP默认使用JDK的动态代理,它的代理是运行时创建,也可以使用CGLIB代理,前者基于接口,后者基于子类,离不开Spring的IOC容器,代理的生成,管理及其依赖关系都是由IOC容器负责

8、Introduction:可以动态的为类添加方法

9、JoinPoint:Advice在应用程序上执行的点或时机,Spring只支持方法的JoinPoint,这个点也可以使属性修改,如:Aspecj可以支持

【基于注解的AOP配置方式】

1.启用@AsjectJ支持,在applicationContext.xml中配置下面一句:

<aop:aspectj-autoproxy />

2.通知类型介绍

(1)Before:在目标方法被调用之前做增强处理,@Before只需要指定切入点表达式即可

(2)AfterReturning:在目标方法正常完成后做增强,@AfterReturning除了指定切入点表达式后,还可以指定一个返回值形参名returning,代表目标方法的返回值

(3)AfterThrowing:主要用来处理程序中未处理的异常,@AfterThrowing除了指定切入点表达式后,还可以指定一个throwing的返回值形参名,可以通过该形参名来访问目标方法中所抛出的异常对象

(4)After:在目标方法完成之后做增强,无论目标方法时候成功完成。@After可以指定一个切入点表达式

(5)Around:环绕通知,在目标方法完成前后做增强处理,环绕通知是最重要的通知类型,像事务,日志等都是环绕通知,注意编程中核心是一个ProceedingJoinPoint

3、代码实现

一、UserManager.java

public interface UserManager {
    public void addUser(String userName, String password);
    public void delUser(int id);
    public String findUserById(int userId);
    public void modefyUser(int userId, String username, String password);


}

  二、UserManagerImp

public class UserManagerImp implements UserManager {

    @Override
    public void addUser(String userName, String password) {

        System.out.println("addUser");
    }

    @Override
    public void delUser(int id) {

        System.out.println("delUser");
    }

    @Override
    public String findUserById(int userId) {

        System.out.println("findUserById");
        return "张三";
    }

    @Override
    public void modefyUser(int userId, String username, String password) {

        System.out.println("modefyUser");

    }


}
三、Sercurity.java

(1)将横切性关注点模块化,建立SecurityHandler.java

(2)采用注解指定SecurityHandler为Aspect

(3)采用注解定义Advice和Pointcut


(4)applicationContext-Annotation.xml中配置启动AspectJ对Annotation的支持,并且将目标类和Aspect类配置到IOC容器中


(5)开发客户端


【基于配置文件方式】

配置文件中的内容发生了改变


【AOP对表达式的支持】


【将客户调用信息传递到Advice中】


【AOP JDK动态代理和CGLIB代理的差别】

好了,小编今天的博客就先写到这里了,以后有机会继续补充关于Spring AOP的内容。

猜你喜欢

转载自blog.csdn.net/tengliu6/article/details/80605789