package com.albert.spring.proxy;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
public class Interceptor
{
public void before()
{
System.out.println("前置通知");
}
public void afterReturning()
{
System.out.println("后置通知");
}
public void beforeAdd(JoinPoint jp)
{
System.out.println("前置通知,获取类名:" + jp.getTarget().getClass().getName());
System.out.println("前置通知,获取方法名:" + jp.getSignature().getName());
System.out.print("前置通知,获取参数:");
for (Object obj : jp.getArgs())
{
System.out.print(obj + "\t");
}
}
public void afterReturningRes(String result)
{
System.out.println("后置通知,返回结果:" + result);
}
public void after()
{
System.out.println("最终通知");
}
public void AfterThrowing()
{
System.out.println("例外通知");
}
public void catchException(Exception e)
{
System.out.println("获取抛出的异常:" + e);
}
public Object around(ProceedingJoinPoint pjp)
throws Throwable
{
System.out.println("进入环绕");
// if(){ // 进行一些判断,再执行环绕
Object result = pjp.proceed();
// }
System.out.println("退出环绕");
return result;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<aop:aspectj-autoproxy /><!-- 开启切面编程功能 -->
<bean id="userDaoImp" class="com.albert.spring.proxy.aop.UserDaoImp" />
<bean id="aspectBean" class="com.albert.spring.proxy.aop.Interceptor" />
<aop:config>
<!-- 声明一个切面类 -->
<aop:aspect id="asp" ref="aspectBean">
<!-- 声明一个切入点 -->
<aop:pointcut id="thecut"
expression="execution(* com.albert.spring.proxy.aop.UserDaoImp.*(..))" />
<aop:after-returning pointcut-ref="thecut"
method="afterReturningRes" returning="result" />
<aop:around pointcut-ref="thecut" method="around" />
<aop:after-throwing pointcut-ref="thecut" method="catchException"
throwing="e" />
<aop:after pointcut-ref="thecut" method="after" />
<aop:before pointcut-ref="thecut" method="before" />
<aop:before pointcut-ref="thecut" method="beforeAdd" />
</aop:aspect>
</aop:config>
</beans>
分享到:
相关推荐
在XML配置中,我们创建一个`<aop:config>`元素,并定义`<aop:aspect>`子元素来声明切面: ```xml <aop:config> <aop:aspect id="loggingAspect" ref="loggingAspectBean"> <!-- ... --> </aop:aspect> </aop:...
本文旨在深入探讨Spring AOP中的两个核心概念:`Aspect`与`Advisor`的区别,并通过具体的配置示例帮助读者更好地理解和应用这些概念。 #### 二、Aspect的概念解析 1. **定义**: - `Aspect`在Spring AOP中被称为...
在Spring框架中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种重要的设计模式,它扩展了传统的面向对象编程(OOP),使得我们可以将关注点分离,特别是那些横切关注点,如日志、事务管理、权限检查...
在IT行业中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种强大的设计模式,它允许程序员将关注点从核心业务逻辑中分离出来,比如日志记录、事务管理等。Spring框架是Java领域实现AOP的一个流行工具...
当我们在配置文件中启用<aop:aspectj-autoproxy/>或在代码中使用@EnableAspectJAutoProxy注解时,Spring会自动为包含切面注解(@Aspect)的bean创建代理。 切面通常由以下几个部分组成: 1. **通知(Advice)**:这...
/beans>四、基于 XML 配置进行 AOP 开发:在 XML 文件中配置切面、通知、切入点等信息,例如:<aop:config><aop:aspect id="myInterceptor" ref="myInterceptorBean"><aop:before method="doAccessCheck" pointcut=...
在XML配置中,我们需要定义`<aop:config>`标签来开启AOP功能,然后使用`<aop:aspect>`定义切面,`<aop:before>`、`<aop:after>`、`<aop:around>`等标签定义通知(advice),最后通过`<aop:pointcut>`定义切入点...
AOP的核心概念是切面(Aspect)、连接点(Join Point)、通知(Advice)、切入点(Pointcut)和织入(Weaving)。在Spring中,切面是封装了特定关注点的类,可以包含方法、属性和字段。连接点是在程序执行过程中能够...
Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它允许我们通过分离关注点来简化应用程序的开发。在传统的面向对象编程中,业务逻辑与日志记录、事务管理、性能监控等横切...
在Spring框架中,注解和XML配置是两种主要的方式来实现面向切面编程(Aspect-Oriented Programming,简称AOP)。AOP是一种编程范式,它允许程序员定义“切面”,这些切面封装了关注点,如日志、事务管理、性能监控等...
对于基于XML配置的AOP,需要在Spring配置文件中定义`<aop:config>`元素来启用AOP支持,然后定义`<aop:aspect>`元素来声明切面,`<aop:before>`、`<aop:after>`、`<aop:after-returning>`、`<aop:after-throwing>`和`...
在XML中,使用`<aop:aspect>`元素定义切面,并通过`ref`属性引用包含通知的bean。例如: ```xml <aop:aspect ref="adviceBean"> <aop:before method="beforeAdvice" pointcut-ref="serviceMethods"/> </aop:...
我们可以通过`<aop:aspect>`标签定义一个切面,并通过`ref`属性指定切面对应的bean。 通知(Advice)定义了在连接点执行的具体行为,例如方法调用前执行的操作、方法调用后执行的操作等。Spring提供了五种类型的...
2. `<aop:aspect>`:此标签用于定义一个切面。每个切面可以包含多个通知和切入点。切面可以是基于bean的(使用`<bean>`标签定义)或者基于注解的(使用`@AspectJ`注解)。 3. `<aop:pointcut>`:这个标签用于定义一...
在Spring配置文件中,我们可以使用`<aop:config>`元素来声明切面,`<aop:pointcut>`定义切点,`<aop:advisor>`或`<aop:aspect>`定义通知。 例如,下面是一个简单的切面定义: ```xml <aop:config> <aop:pointcut ...
- `<aop:aspect id="aspect" ref="myAspect">`创建了一个切面,id为`aspect`,引用了`myAspect` Bean。 - `<aop:pointcut>`定义了切入点,`expression`属性中的`execution(* com.itheima.jdk.*.*(..))`匹配`...
4. `<aop:aspect>`:定义一个切面,可以包含多个通知和切入点。切面可以看作是封装了多个相关通知的逻辑单元。 5. `<aop:before>`, `<aop:after>`, `<aop:around>`, `<aop:after-returning>`, `<aop:after-throwing...
4. **组装切面**:通过`<aop:aspect>`元素将通知与切入点组合成切面。在切面中,你可以定义多个通知并引用多个切入点: ```xml <aop:aspect ref="myAspect"> <aop:before method="beforeMethod" pointcut-ref=...