博客
关于我
spring 基于注解实现Aop
阅读量:396 次
发布时间:2019-03-05

本文共 3805 字,大约阅读时间需要 12 分钟。

一.基于spirng的注解实现Aop的开发步骤

 

1.1 在pom文件中添加依赖

junit
junit
4.11
test
org.springframework
spring-context
5.0.2.RELEASE
org.aspectj
aspectjweaver
1.8.7

1.2 创建目标类

1. iAccountService接口

package com.ljf.spring.aop.anno.service;public interface IAccountService {    /**     * 模拟保存账户     */    void saveAccount();    /**     * 模拟更新账户     * @param i     */    void updateAccount(int i);    /**     * 删除账户     * @return     */    int  deleteAccount();}

2. 实现类

package com.ljf.spring.aop.anno.service.impl;import com.ljf.spring.aop.anno.service.IAccountService;import org.springframework.stereotype.Service;/** * @ClassName: AccountService * @Description: TODO * @Author: liujianfu * @Date: 2021/02/05 10:41:48  * @Version: V1.0 **/@Service("accountService")public class AccountService implements IAccountService {    @Override    public void saveAccount() {        System.out.println("执行了保存");        int i=1/0;    }    @Override    public void updateAccount(int i) {        System.out.println("执行了更新"+i);    }    @Override    public int deleteAccount() {        System.out.println("执行了删除");        return 0;    }}

 

1.3 创建切面类

在切面类中定义切入点、通知、切面

package com.ljf.spring.aop.anno.util;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.*;import org.springframework.stereotype.Component;/** * @ClassName: Logger * @Description: TODO * @Author: liujianfu * @Date: 2021/02/05 10:45:13  * @Version: V1.0 **/@Component("logger")@Aspect//表示当前类是一个切面类public class Logger {    //切入点    @Pointcut("execution(* com.ljf.spring.aop.anno.service.impl.*.*(..))")    private void pt1(){}   //作用是切点表达式的抽取    /**     * 前置通知     */  // @Before("pt1()")    public  void beforePrintLog(){        System.out.println("前置通知Logger类中的beforePrintLog方法开始记录日志了。。。");    }    /**     * 后置通知     *///    @AfterReturning("pt1()")    public  void afterReturningPrintLog(){        System.out.println("后置通知Logger类中的afterReturningPrintLog方法开始记录日志了。。。");    }    /**     * 异常通知     */    //@AfterThrowing("pt1()")    public  void afterThrowingPrintLog(){        System.out.println("异常通知Logger类中的afterThrowingPrintLog方法开始记录日志了。。。");    }    /**     * 最终通知     *///    @After("pt1()")    public  void afterPrintLog(){        System.out.println("最终通知Logger类中的afterPrintLog方法开始记录日志了。。。");    }    @Around("pt1()")    public Object aroundPringLog(ProceedingJoinPoint pjp){        Object rtValue = null;        try{            Object[] args = pjp.getArgs();//得到方法执行所需的参数            System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。前置");            rtValue = pjp.proceed(args);//明确调用业务层方法(切入点方法)            System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。后置");            return rtValue;        }catch (Throwable t){            System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。异常");            throw new RuntimeException(t);        }finally {            System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。最终");        }    }}

1.4 在xml配置文件中开启Aop注解

1.5 调用

package com.ljf.spring.aop.anno;import com.ljf.spring.aop.anno.service.IAccountService;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * Hello world! * */public class App {    public static void main(String[] args) {        //1.获取容器        ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");        //2.获取对象        IAccountService as = (IAccountService)ac.getBean("accountService");        //3.执行方法        as.saveAccount();    }}

使用了环绕通知:

转载地址:http://lruzz.baihongyu.com/

你可能感兴趣的文章
mysql配置读写分离并在若依框架使用读写分离
查看>>
MySQL里为什么会建议不要使用SELECT *?
查看>>
MySQL里的那些日志们
查看>>
MySQL锁
查看>>
MySQL锁与脏读、不可重复读、幻读详解
查看>>
MySQL锁机制
查看>>
mysql锁机制,主从复制
查看>>
Mysql锁机制,行锁表锁
查看>>
MySQL锁表问题排查
查看>>
Mysql锁(1):锁概述和全局锁的介绍
查看>>
Mysql锁(2):表级锁
查看>>
MySQL锁,锁的到底是什么?
查看>>
MySQL错误-this is incompatible with sql_mode=only_full_group_by完美解决方案
查看>>
Mysql错误2003 -Can't connect toMySQL server on 'localhost'(10061)解决办法
查看>>
MySQL错误提示mysql Statement violates GTID consistency
查看>>
mysql错误:This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de
查看>>
mysql长事务
查看>>
mysql问题记录
查看>>
mysql间隙锁
查看>>
MySQL集群解决方案(1):MySQL数据库的集群方案
查看>>