博客
关于我
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/

你可能感兴趣的文章
Netty工作笔记0056---Unpooled应用实例2
查看>>
Netty工作笔记0057---Netty群聊系统服务端
查看>>
Netty工作笔记0058---Netty群聊系统客户端
查看>>
Netty工作笔记0059---Netty私聊实现思路
查看>>
Netty工作笔记0060---Netty心跳机制实例
查看>>
Netty工作笔记0060---Tcp长连接和短连接_Http长连接和短连接_UDP长连接和短连接
查看>>
Netty工作笔记0061---Netty心跳处理器编写
查看>>
Netty工作笔记0062---WebSocket长连接开发
查看>>
Netty工作笔记0063---WebSocket长连接开发2
查看>>
vue样式穿透 ::v-deep的具体使用
查看>>
Netty工作笔记0065---WebSocket长连接开发4
查看>>
Netty工作笔记0066---Netty核心模块内容梳理
查看>>
Vue基本使用---vue工作笔记0002
查看>>
Netty工作笔记0068---Protobuf机制简述
查看>>
Netty工作笔记0069---Protobuf使用案例
查看>>
Netty工作笔记0070---Protobuf使用案例Codec使用
查看>>
Netty工作笔记0071---Protobuf传输多种类型
查看>>
Netty工作笔记0072---Protobuf内容小结
查看>>
Netty工作笔记0073---Neety的出站和入站机制
查看>>
Netty工作笔记0074---handler链调用机制实例1
查看>>