AOP的Junit测试

加入依赖

======================

<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表达式的细节后面需

要再查询。

 

posted @ 2020-04-18 19:49  工设091  阅读(536)  评论(0)    收藏  举报