个人主页:
举例:指定切入点为:任意公共方法
✨前置通知@Before
使用aspectj框架的注解,实现前置通知
实现步骤:
1. 新建maven项目
2. 修改pom.xml 加入依赖
spring-context依赖, spring-aspects依赖(能使用aspectj框架的功能)junit3. 创建业务接口和实现类。
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()); }}
创建配置文件
<" />