加入依赖
======================
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.9.5</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.5.RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
配置文件
======================
定义接口及接口实现
======================
public interface UserDao {
void add(int a, int b);
}
------
@Component
public class UserDaoImpl implements UserDao {
public void add(int a, int b) {
System.out.println(a+b);
}
}
定义切面类
======================
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Component("aspect")
@org.aspectj.lang.annotation.Aspect
public class Aspect {
@Pointcut("execution(* add(..))")
public void pointCut() {
}
@Before("pointCut()")
public void before(){
System.out.println("***********before");
}
@After("pointCut()")
public void after(){
System.out.println("***********after");
}
}
单元测试
======================
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import cn.signit.test.dao.UserDao;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring-aop.xml")
public class AspectTest {
@Autowired
private UserDao userDaoImpl;
@Test
public void test() {
userDaoImpl.add(1, 2);
}
}
测试结果:
===============================
===============================
===============================
===============================
===============================
===============================
采用配置类的方式(不需要xml配置)
创建一个配置类
======================
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@Configuration
@EnableAspectJAutoProxy(proxyTargetClass =false)
@ComponentScan("cn")
public class Config {
}
其余不变、再进行测试
======================
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import cn.signit.test.config.Config;
import cn.signit.test.dao.UserDao;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringJUnitConfig(Config.class)
public class AspectTest2 {
@Autowired
private UserDao userDaoImpl;
@Test
public void test() {
userDaoImpl.add(1, 2);
}
}
测试结果:
====================
关于xml中通知类型的XML配置方法
以及execution表达式的细节后面需
要再查询。
原文:https://www.cnblogs.com/dengw125792/p/12727672.html