Spring之Aop的注解配置

1.首先要添加jar包

 

2.写方法接口

public interface calculate {

     int add(int i, int j);
    
     int sub(int i, int j);
    
     int mul(int i, int j);
    
     int div(int i, int j);
    
}

 

3.写方法的实现类,并把其加入到IOC容器中去

@Component
public class calculateImpl implements calculate {
    
    public int add(int i, int j) {
        return i+j;
    }
    
    public int sub(int i, int j) {
        return i-j;
    }
    
    public int mul(int i , int j) {
        return i*j;
    }
    
    public int div(int i,int j) {
        return i/j;
    }

}
 

4.写切面,首先要把这个类加入到IOC容器中去,其次利用@Aspect声明它为切面。

定义所想执行的方法,在calculateImpl方法实现的相应位置加上通知。

在同一个连接点上应用不止一个切面时, 除非明确指定, 否则它们的优先级是不确定的,这时候可利用@Order()注解来设置优先级,数字越小,优先级越高。

 

@Before: 前置通知, 在方法执行之前执行

@After: 后置通知, 在方法执行之后执行

@AfterRunning: 返回通知, 在方法返回结果之后执行

@AfterThrowing: 异常通知, 在方法抛出异常之后

@Around: 环绕通知, 围绕着方法执行

 

 

@Component
@Aspect
public class SimpleAspect {


    /*
     * @Pointcut声明切入点表达式。
     * 定义一个方法,方法中一般不需要写代码
     */
    @Pointcut("execution(* com.zxw.spring.bean.aop.*.*(int,int))")
    public void pointCut() {
    }
    

    @Before("pointCut()")
    public void before(JoinPoint joinPoint) {
        //如果需要这里可以通过JoinPoint取出参数进行处理
        
        //通过joinpoin获取签名的方法获取方法名
        String methoName = joinPoint.getSignature().getName();
        
        //获取要传入的参数
        List<Object> args = Arrays.asList(joinPoint.getArgs());
        
        System.out.println(methoName+"哈哈,方法执行前!"+args);
    }

 

    //在后置通知中还不能访问返回的结果
    @After("pointCut()")
    public void after(JoinPoint joinPoint) {
        
        //通过joinpoin获取签名的方法获取方法名
        String methoName = joinPoint.getSignature().getName();
        
        //获取要传入的参数
        List<Object> args = Arrays.asList(joinPoint.getArgs());
        
        System.out.println(methoName+"哈哈,方法执行后!"+args);
    }

 

    //在返回通知中能访问返回的结果。在返回通知中, 只要将 returning 属性添加到 @AfterReturning 注解中, 就可以访问连接点的返回值. 该属性的值即为用来传入返回值的参数名称. 必须在通知方法的签名中添加一个同名参数. 在运行时, Spring AOP 会通过这个参数传递返回值.
    @AfterReturning(value = "pointCut()", returning = "result")
    public void afterReturning(JoinPoint joinPoint, Object result) {
        System.out.println("返回值--> "
                + result);
    }

 

    //在出现制定异常的时候可以执行相应的代码
    @AfterThrowing(value = "pointCut()", throwing = "error")
    public void afterThrowing(JoinPoint jp, Throwable error) {
        System.out.println("error:" + error);
    }

 

    /*
     * 环绕通知是所有通知类型中功能最为强大的, 能够全面地控制连接点. 甚至可以控制是否执行连接点
     * 环绕通知需要携带ProceedingJoinPoint类型的参数
     * ProceedingJoinPoint类型的参数可以决定是否执行该方法
     * 环绕通知必须有返回值,返回值为目标方法的返回值, 否则会出现空指针异常
     */
    @Around("pointCut()")
    public Object around(ProceedingJoinPoint pjp) {
        Object result = null;
        String methoName = pjp.getSignature().getName();
        try {
            //前置通知
            System.out.println(methoName+"around begin");
            
            //执行目标方法
            result = pjp.proceed();
            
            //后置返回通知
            System.out.println("around返回值--> "+ result);
        } catch (Throwable ex) {
            //异常通知
            System.out.println("around出错了!");
        }
        //后置通知
        System.out.println(methoName+"around end");
        return result;
    }

}

 

5.在配置文件中进行设置,并加入aop的命名空间Namespaces

<!-- 配置自动扫描的包 -->
    <context:component-scan base-package="com.zxw.spring.bean.aop"/> 
    
 <!-- 使AspjectJ注解起作用:自动为匹配的类生成代理对象 -->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringAOP(面向切面编程)是通过注解配置的。AOP是一种用于将横切关注点(如日志记录、事务管理等)与主业务逻辑分离的技术。使用注解配置AOP可以更简洁、灵活地定义切面和通知。 要配置AOP,我们需要使用到Spring的几个注解。首先是使用@Aspect注解定义一个切面,该注解告诉Spring这是一个切面类。然后,我们可以在切面类内部定义多个通知方法,通知方法使用@Before、@After、@Around等注解来指定它们在目标方法之前、之后或者环绕目标方法执行。 在通知方法内部,我们可以通过使用@Pointcut注解来定义切点表达式,切点表达式用于指定哪些方法需要被拦截,以何种方式进行拦截。通过@Pointcut定义的切点可以被多个通知方法共享。 除了切面和通知,我们还可以使用其他注解来指定通知的类型。例如,使用@Before注解表示在目标方法执行之前执行通知方法,使用@After注解表示在目标方法执行之后执行通知方法,使用@Around注解表示在目标方法执行之前和之后都执行通知方法配置AOP时,我们还需要使用@Bean注解来将切面类注册为Spring一个bean。这样,Spring容器才能够自动识别它并将其应用于适当的目标方法。 总结一下,通过使用注解配置AOP,我们可以更方便地定义切面和通知,并将它们应用于目标方法SpringAOP注解提供了灵活的方式来实现横切关注点的分离,使得代码更具可读性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值