一个简单的 aop demo
spring 配置
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
<!-- 注册aspectj -->
<aop:aspectj-autoproxy />
<!-- 注册代理过滤器 -->
<context:component-scan base-package="com.aspect.*">
<context:include-filter type="annotation"
expression="org.aspectj.lang.annotation.Aspect" />
</context:component-scan>
简单的环绕方式
@Around("execution(* com.aspect..*.add*(..))")
public Object aroundAdd(ProceedingJoinPoint pjp) throws Throwable {
// Class pt = (Class) pjp.getTarget();
Object retVal = pjp.proceed();
for (int i = 0; i < pjp.getArgs().length; i++) {
System.out.println(">>>around>>>参数:" + pjp.getArgs()[i]);
}
System.out.println(">>>aronud>>>方法名:" + pjp.getSignature());
System.out.println("SourceLocation:"+pjp.getSourceLocation());
System.out.println("StaticPart:"+pjp.getStaticPart());
System.out.println("this:"+pjp.getThis());
System.out.println("Target:"+pjp.getTarget().toString());
return retVal;
}
demo
public class TestDemo {
static String context = null;
static ApplicationContext applicationContext;
static {
context = "applicationContext.xml";// ehcache简单配置(命名空间)
applicationContext = new ClassPathXmlApplicationContext(context);
}
public static void main(String[] arg) {
System.out.println("start---");
IDemo demo = (IDemo) applicationContext.getBean("demo");
IUser iu = demo.getUserImpl();
if (iu != null) {
iu.addUser("风光");
demo.getUserImpl().findUser("Lucy") ;
}
}
}
附件是完整的demo
输出
start---
>>>>>>>> 增加用户--检查ing..........
参数:风光
方法名:addUser
---------权限检测--------------
>>>>>>>> 增加用户--检查完毕!未发现异常!..........
>>>around>>>参数:风光
>>>aronud>>>方法名:void com.aspect.service.IUser.addUser(String)
SourceLocation:org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint$SourceLocationImpl@1a1399
StaticPart:execution(void com.aspect.service.IUser.addUser(String))
this:com.aspect.service.impl.UserImpl@1551b0
Target:com.aspect.service.impl.UserImpl@1551b0
>>>>>>>> 准备搜查用户..........
Lucy
>>>>>>>> 搜查用户完毕..........
分享到:
相关推荐
1、spring切入点 2、spring前置织入,传入参数处理 3、spring后置织入,传入参数处理 4、环绕织入,参数及返回值处理 5、返回后织入,返回值处理 6、异常织入,异常处理 maven环境下,测试用例可直接运行
1. **注解驱动的AOP**:Spring支持使用注解来定义切面,如`@Aspect`用于声明一个类为切面,`@Before`、`@After`、`@Around`、`@AfterReturning`和`@AfterThrowing`分别定义前置通知、后置通知、环绕通知、返回后通知...
现在我们来详细探讨Spring Boot集成AOP的基本概念、应用场景以及如何实现一个简单的Before前置通知DEMO。 1. **AOP概述** 面向切面编程是一种编程范式,旨在提高代码的可复用性和模块化。它通过将关注点分离,将横...
Spring注解AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架中的一个重要特性,它使得开发者可以在不修改原有代码的情况下,通过添加注解来实现横切关注点,如日志、事务管理等。下面我们将深入探讨...
以入门级的`advice`为例,我们可能有一个简单的日志切面: ```java @Aspect @Component public class LoggingAspect { @Pointcut("execution(* com.example.service.*.*(..))") public void serviceMethods() {} ...
标题“Spring Aop demo”指的是一个关于Spring框架的面向切面编程(Aspect Oriented Programming,简称AOP)的示例项目。在Spring框架中,AOP用于处理系统中的横切关注点,比如日志记录、事务管理、权限验证等,这些...
在`springAop1`这个压缩包中,可能包含了一个简单的应用示例,展示了如何定义一个切面类,以及如何在该类中定义通知方法。例如,我们可能会看到一个名为`LoggingAspect`的类,其中包含了`@Before`注解的方法,用于在...
本篇将通过注解方式探讨如何在Spring中实现AOP,基于提供的资源,我们可以看到一个实际的Demo项目结构。 首先,我们来看项目的基本结构: 1. `bin`目录:编译后的Java类文件会放在这里。 2. `.settings`目录:包含...
压缩包中的"aop"文件可能包含了一个简单的Spring AOP示例项目,包括了上述两种实现方式的源代码和配置文件。下载后,可以直接运行以观察AOP如何工作。 总结来说,Spring AOP提供了一种强大的方式来实现横切关注点,...
"AOPDemo.rar"可能包含一个简单的Android项目,用于演示AOP的使用。在这个项目中,开发者可能会使用如AspectJ、Dagger 2或 ButterKnife Zelezny等库来实现AOP。AspectJ是一个强大的AOP工具,支持Java和Android,它...
在本AopDemo中,大神展示了一个高级的C# AOP实现,帮助我们深入理解AOP的核心概念。 首先,AOP的关键概念包括切面(Aspect)、通知(Advice)、连接点(Join Point)、切入点(Pointcut)和织入(Weaving)。切面是...
本示例通过 PostSharp 2.0 在一个简单的控制台应用中展示了 AOP 的基本使用。PostSharp 允许我们定义切面并在不修改原有代码的情况下,轻松地添加额外的功能。这有助于保持代码的清晰性和可维护性,尤其对于需要大量...
`AOPDemo-master_aop_DEMO_android_`这个项目很可能是为了演示如何在Android环境中应用AOP技术。下面我们将详细探讨AOP在Android开发中的具体应用和实现方式。 1. **注解驱动的AOP**:在Java和Android中,AOP通常是...
Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要模块,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。这个Demo是针对Spring AOP的实践教程,适用于学习者理解...
2. **定义切面**:创建一个Java类作为切面,该类通常会包含一个或多个通知方法。这些方法需要使用`@Before`, `@After`, `@AfterReturning`, `@AfterThrowing` 或 `@Around` 注解来标记。例如: ```java @Aspect ...
【标题】"aopdemo-master.zip" 是一个与Spring Boot AOP相关的项目压缩包,它包含了一个名为"aopdemo-master"的主目录。这个项目很可能是一个示例或教程,用于展示如何在Spring Boot应用程序中使用面向切面编程...
下面是一个简单的基于注解的AOP示例: ```java import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.springframework.stereotype.Component; @Aspect @Component ...
在这个"aopDemo.rar"压缩包中,我们可以看到一个关于如何使用AOP来实现日志ID追踪的示例。 AOP的核心概念是"切面",它包含了"通知"(advice)、"连接点"(join point)、"切入点"(pointcut)和"织入"(weaving)。...
在"AopDemo"中,可能有两个通知,一个用于双击过滤,另一个用于动态权限处理。 4. **织入(Weaving)**:AspectJ将切面代码与主应用程序代码结合的过程。这可以在编译时或运行时完成。在这个示例中,可能是通过...