spring入门(10) 使用Aspectj进行AOP开发

添加类库:aspectjrt.jar和aspectjweaver.jar

添加aop schema.

定义xml元素:<aop:aspectj- autoproxy>

编写java类,并用@Aspect注解成通知

AspectJ 支持 5 种类型的通知注解:

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

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

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

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

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

配置成普通bean元素即可 .

二、

后置通知:@After

@After("execution(* *..WelcomeService.*(..))")

public void applaud(){..}

后置通知在目标方法执行完成之后执行.一个切面aspect包含很多通知.

@After

后置通知表明目标方 法执行完之后,不论是否抛异常,都会织入该通知.

@AfterReturning

方法返回后通知只在目标方法返回以后执行,若抛 异常不执行.

@AfterReturning(pointcut="",returning="res")

public void xxx(Joinput jp,Object res)

在AfterReturning

通知中可接收到返回值.res即是用来接收返回值的对象.

三、

环绕 通知:@Around

@Around("execution(* *..WelcomeService.*(..))")

public void around (ProceedingPointCut jp){..}

注意:可以控制目标方法是否调用,以及返回完全不同的对象,要慎用.

指定优先 级:

@Aspect

@Order(0)

public class xxx{...}

加上@Order注解可以指定加入切面的优先级(先后顺序,值越小, 优先级越高)

时间: 2024-08-04 12:40:17

spring入门(10) 使用Aspectj进行AOP开发的相关文章

《Spring 5 官方文档》1. Spring入门指南(一)

译者注:为了方便理解,本译文里面部分名词翻译如下,如有异议,请在评论区指出. Dependency Injection - 依赖注入 Inversion of Control – 控制反转 Instrumentation – 植入 AOP - 面向切面​​的编程 Milestones – 里程碑 Snapshots – 快照 Artifact - 工件(这个词在文中大部分地方都没有翻译,用过Maven或Gradle的都明白,如果有更好的中文翻译,请写在评论区) 1.Spring入门指南 本参考指

spring入门(1)---开始spring之旅

Spring是一个开源的控制反转(Inversion of Control ,IoC)和面向切面(AOP)的容器框架.它的主要目得是简化企业开发 . IOC 控制反转 public class PersonServiceBean { private PersonDao personDao = new PersonDaoBean(); public void save(Person person){ personDao.save(person); } } PersonDaoBean 是在应用内部创

重新学习之spring第二个程序,配置AOP面向切面编程

第一步:在配置好的ioc容器的基础上,导入面向切面编程所需要的jar包 (本案例用的是spring3.2.4,由于spring3.2.4的官网jar包中不再有依赖包,所以依赖包都是从网上找的) 第二步:配置applicationContext.xml(包括ioc对象配置,以及面向切面编程的相关配置)   1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.

Java中实现基于Aspectwerkz的AOP开发

一.AOP编程概览 面向对象编程技术进入软件开发的主流对软件的开发方式产生了极大的影响,开发者可以用一组实体以及这些实体之间的关系将系统形象地表示出来,这使得他们能够设计出规模更大.更复杂的系统,开发周期也比以前更短.OO开发的唯一问题是,它本质上是静态的,需求的细微变化就可能对开发进度造成重大影响. Aspect-Oriented Programming(AOP)是对OO技术的补充和完善,它允许开发者动态地修改静态的OO模型,构造出一个能够不断增长以满足新增需求的系统,就象现实世界中的对象会在

Spring的无接口代理实现AOP

package com.rx.spring.cglib; public class UserManagerImpl { // implements UserManager { public void addUser(String username, String password) { System.out.println("-------UserManagerImpl.addUser()----------"); } public void deleteUser(int id) {

spring boot 搭建的一个企业级快速开发脚手架

slife spring boot 搭建的一个企业级快速开发脚手架. 这本来是我自己平时测试用的项目,没打算开源. 但今天放到 开源中国 和 GitHub 没想到会被 码云设置为推荐项目.并且还上了今日热门项目 第一名 联系方式 qq群 421351927 項目地址https://gitee.com/jamen/slife 技术栈 Spring Boot MySQL Freemark SiteMesh Shiro Boostrapt mybatis.mybatisPlus redis Activ

使用Spring进行面向切面编程(AOP)---讲解+代码

6.1. 简介 6.2.4.1. 前置通知(Before advice) 一个切面里使用 @Before 注解声明前置通知: import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; @Aspect public class BeforeExample {          @Before("com.xyz.myapp.SystemArchitecture.dataAccessOpe

Spring源码分析:实现AOP(转载)

这两天一直在读spring1.2的AOP实现源码,AOP实现原理说起来很简单,对于实现业务接口的对象使用java代理机制实现,而对于一般的类使用cglib库实现,但spring的实现还是比较复杂的,不过抓住了本质去看代码就容易多了.发现一篇04年写的<spring源码分析:实现AOP>,倒是不用自己再写了,04年的时候已经有很多人研读过spring的源码,而那时的我还在学校,对java半懂不懂的状态,就算到现在也不敢说真的懂了,继续学习.努力.文章如下:     我的问题        为了完

【Spring实战】—— 12 AspectJ报错:error at ::0 can&#039;t find referenced pointcut XXX

今天在使用AspectJ进行注解切面时,遇到了一个错误. 切点表达式就是无法识别--详细报错信息如下: Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xingoo' defined in class path resource [bean.xml]: Initialization of bean fail