一、pom.xml中添加aop AspectJ 相关Maven依赖
<!--AspectJ Maven相关依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.9.5</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.0</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.3.0</version>
</dependency>
二、创建aop切面工具类
/**
* 切面类
**/
@Aspect
@Component
public class LogAspects {
//抽取公共的切入点表达式
@Pointcut("execution(public Integer com.cloud.service.*.*(..))")
public void pointCut(){};
@Before("pointCut()")
public void logStart(JoinPoint joinPoint){
Object[] args = joinPoint.getArgs();
System.out.println(" 业务层方法 "+joinPoint.getSignature().getName()
+"运行....@Before:参数列表是:{"+ Arrays.asList(args)+"}");
}
@After("pointCut()")
public void logEnd(JoinPoint joinPoint){
System.out.println(" 业务层方法 "+joinPoint.getSignature().getName()
+"结束。。。@After");
}
//JoinPoint一定要出现在参数表的第一位
@AfterReturning(value="pointCut()",returning="result")
public void logReturn(JoinPoint joinPoint,Object result){
System.out.println(" 业务层方法 "+joinPoint.getSignature().getName()
+"正常返回。。。@AfterReturning:运行结果:{"+result+"}");
}
@AfterThrowing(value="pointCut()",throwing="exception")
public void logException(JoinPoint joinPoint,Exception exception){
System.out.println(" 业务层方法 "+joinPoint.getSignature().getName()
+"异常。。。异常信息:{"+exception+"}");
}
}
说明:此处方法中可以添加保存数据库的操作日志代码!!!
三、创建UserService接口
/**
* 应用切面类的接口
*/
public interface UserService {
/**
* 加法运算
* @param x
* @param y
* @return
*/
Integer add(Integer x,Integer y);
}
四、创建UserServiceImpl接口实现类实现UserService接口
/**
* 接口实现类
*/
@Service
public class UserServiceImpl implements UserService {
@Override
public Integer add(Integer x, Integer y) {
if(x==null||y==null){
throw new NullPointerException("参数不能为空");
}
return x+y;
}
}
五、创建UserServiceController测试切面功能
/**
* 访问入口
*/
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@ResponseBody
@RequestMapping("/userAop")
public Integer userAop(Integer x,Integer y){
Integer result = userService.add(x, y);
return result;
}
}
六、创建OrderService接口
/**
* 应用切面类的接口
*/
public interface OrderService {
/**
* 加法运算
* @param a
* @param b
* @return
*/
Integer des(Integer a,Integer b);
}
七、创建OrderServiceImpl接口实现类实现OrderService接口
/**
* 接口实现类
*/
@Service
public class OrderServiceImpl implements OrderService {
@Override
public Integer des(Integer a, Integer b) {
if(a==null||b==null){
throw new NullPointerException("参数不能为空");
}
return a-b;
}
}
八、创建OrderServiceController测试切面功能
/**
* 访问入口
*/
@Controller
@RequestMapping("/order")
public class OrderController {
@Autowired
private OrderService orderService;
@ResponseBody
@RequestMapping("/orderAop")
public Integer orderAop(Integer a,Integer b){
Integer result = orderService.des(a, b);
return result;
}
}
九、启动项目,调用测试接口测试Aop功能