Aspect Oriented Programming  面向切面编程。AOP还是以OOP为基础,只不过将共同逻辑封装为组件,然后通过配置的方式将组件动态切入到原有组件中。这样做的有点有:可以在不修改原有组件功能代码的基础上,对组件进行扩充,对公共需要和传统业务进行解耦。

2,语法

1.切面组件(加什么功能?) Aspect

在组件中寻找共通位置和时机,将追加功能切入到原有组件中。追加的功能组件一般被称为切面组件。

2.  切入点(给谁加?) Pointcut

切入点用于指定切入目标组件或方法。 Spring 提供了多种表达式,下面介绍方法方法限定表达式、类型限定表达式(使用的最多)、Bean名称限定表达式

方法限定表达式

execution( 修饰符? 返回类型 方法名 ( 参数列表 )  抛出异常? )
// 所有以 find 开头的方法要被切入追加功能
execution(* find*(..))
//DeptService 类中所有方法要切入追加功能
execution(* cn.xdl.service.DeptService.*(..))
//cn.xdl.service 包下所有类所有方法
execution(* cn.xdl.service.*.*(..))
//cn.xdl.service 包及子包下所有类所有方法
execution(* cn.xdl.service..*.*(..))

类型限定表达式

within( 类型 )
//DeptService 组件所有方法要被切入追加功能
within(cn.xdl.service.DeptService)
//cn.xdl.service 包下所有类所有方法
within(cn.xdl.service.*)
//cn.xdl.service 包及子包下所有类所有方法
within(cn.xdl.service..*)

Bean 名称限定表达式

bean(Spring 容器中组件的 id 名 )
//id=deptService 组件的所有方法
bean(deptService)
//id 以 Service 结尾的组件的所有方法
bean(*Service)

3.  通知(什么时候加?) Advice

通知用于决定切面组件追加的时机,例如在原有组件方法前、方法后、抛出异常之后等。

try{
// 追加逻辑 -- 》前置通知 <aop:before>
// 原有组件的方法
// 追加逻辑 -- 》后置通知 <aop:after-returning>catch(){
// 追加逻辑 -- 》异常通知 <aop:after-throwing>
}finally{
// 追加逻辑 -- 》最终通知 <aop:after>
}
//环绕通知:等价于前置 + 后置综合效果 <aop:around>

 

3,Demo

首先利用注解的方式把SpringMVC的框架搭建好。下面是项目的结构图:

【Spring】SpringMVC之详解AOP

User类:

package cn.xdl.bean;

public class User {
    private int id;
    private String name;
    private String password;
    public User() {
        super();
    }
    public User(int id, String name, String password) {
        super();
        this.id = id;
        this.name = name;
        this.password = password;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}
User.java

相关文章:

  • 2022-12-23
  • 2022-02-14
  • 2021-08-17
  • 2021-09-06
  • 2021-11-02
  • 2021-11-04
猜你喜欢
  • 2021-12-16
  • 2021-06-16
  • 2022-03-04
  • 2021-12-15
  • 2021-12-03
相关资源
相似解决方案