1. 引入依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.22</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.22</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.3.22</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.3.22</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.3.22</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.3.22</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.3.22</version>
</dependency>
2. 开启aop:注解@EnableAspectJAutoProxy
package com.yzy.springdemo;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@ComponentScan("com.yzy")
@EnableAspectJAutoProxy
public class SpringAnnotationTest {
}
3. 定义普通类
package com.yzy.springdemo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class SpringDemo {
public String name;
public Integer age;
@Autowired
public SpringDemo(Student student){
this.name = student.name;
System.out.println("有参的构造方法,name = " + name);
}
public SpringDemo(String name, Integer age){
this.name = name;
this.age = age;
System.out.println("有参的构造方法");
}
public void test(){
System.out.println("test-----");
}
}
@Component
class Student{
public String name = "123456";
}
4.定义切面类
package com.yzy.springdemo.aop;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class AopBean {
@Pointcut("execution(public * com.yzy.springdemo.SpringDemo.test())")
public void a(){
}
@Before("a()")
public void before(){
System.out.println("前置增强");
}
}
5.使用
package com.yzy.springdemo;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Test {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringAnnotationTest.class);
SpringDemo springDemo = (SpringDemo)context.getBean("springDemo");
springDemo.test();
}
}
6.输出结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a0d11ad202e9e4971c1c6c6a9a5908a4.png)