@AspectJ注解方式的aop
第一步:导入依赖
<dependencies>
第二步:开启@aspect注册 和包扫描
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
第三步:定义目标对象并注入到spring容器中
public interface ICustomerService {
public void save();
public int find();
public int error();
}
@Component
public class ICustomerServiceImpl implements ICustomerService {
public void save() {
System.out.println("客户保存了。。。。。");
}
public int find() {
System.out.println("客户查询数量了。。。。。");
return 100;
}
@Override
public int error() {
int a = 1 / 0;
return 0;
}
}
=======上面是基于接口的动态代理========下面是基于类的动态代理=========
@Service
public class ProductService {
public void save() {
System.out.println("商品保存了。。。。。");
}
public int find() {
System.out.println("商品查询数量了。。。。。");
return 99;
}
}
第四步:编写通知类 并注入到spring容器中
package com.bird.advice.annotationaspectjaop.aspect;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;