个人主页:
举例:

指定切入点为:任意公共方法

✨前置通知@Before

使用aspectj框架的注解,实现前置通知

实现步骤:

1. 新建maven项目

2. 修改pom.xml 加入依赖
spring-context依赖, spring-aspects依赖(能使用aspectj框架的功能)junit

3. 创建业务接口和实现类。

4. 创建一个叫做切面类,是一个普通类
1)在类的上面加入@Aspect
2) 在类中定义方法, 方法表示切面的功能。
在方法的上面加入Aspect框架中的通知注解,例如@Before(value=“切入点表达式”)

5. 创建spring配置文件。
1)声明目标对象
2)声明切面类对象
3)声明自动代理生成器

6. 创建测试类,测试目标方法执行时,增加切面的功能

下面我们开始跟着步骤实践

pom.xml 加入依赖

  <dependencies>        <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-context</artifactId>      <version>5.2.5.RELEASE</version>    </dependency>        <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-aspects</artifactId>      <version>5.2.5.RELEASE</version>    </dependency>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>4.11</version>      <scope>test</scope>    </dependency>  </dependencies>

创建业务接口和实现类

public interface SomeService {    void doSome(String name,Integer age);}
public class SomeServiceImpl implements SomeService {    @Override    public void doSome(String name, Integer age) {        System.out.println("业务方法doSome(),创建商品订单");    }}

创建切面类

/** *  @Aspect: 切面类的注解。 *     位置:放在某个类的上面 *     作用:表示当前类是切面类。 *     切面类:表示切面功能的类 */@Aspectpublic class MyAspect {    //定义方法,表示切面的具体功能    /*       前置通知方法的定义       1)方法是public       2)方法是void       3)方法名称自定义       4)方法可以有参数,如果有是JoinPoint          也可以没有     */    /**     @Before:前置通知     属性:value 切入点表达式,表示切面的执行位置。     在这个方法时,会同时执行切面的功能     位置:在方法的上面     特点:     1)执行时间:在目标方法之前先执行的。     2)不会影响目标方法的执行。     3)不会修改目标方法的执行结果。     */    @Before(value = "execution(public void youfei1_v.service.impl.SomeServiceImpl.doSome(String ,Integer))")    public void myBefore(){        //切面代码        System.out.println("前置通知,切面功能在目标方法之前执行"+new Date());    }}

创建配置文件

<" />

投票传送门(欢迎伙伴们投票)