1、接口类
package cn.com.gan.spring.aop;
public interface IHello {
public void SayHello();
public void sayHelloAgain();
}
2、实现类
package cn.com.gan.spring.aop;
public class ImpHello implements IHello {
@Override
public void SayHello() {
System.out.println("hello everybody!");
}
@Override
public void sayHelloAgain(){
System.out.println("hello everybody again");
}
}
3、advice ,方法名不限,JoinPoint可有可无。ProceedingJoinPoint 必须有 而且必须有返回值
package cn.com.gan.spring.aop;
package cn.com.gan.spring.aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
public class XmlLoggerBefore {
public void before(JoinPoint jointPoint) {
System.out.println("开始记录:"
+ jointPoint.getSignature().getDeclaringTypeName() + "."
+ jointPoint.getSignature().getName());
}
public void after(JoinPoint jointPoint) {
System.out.println("记录结束:"
+ jointPoint.getSignature().getDeclaringTypeName() + "."
+ jointPoint.getSignature().getName());
}
public Object around(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("around开始记录:"
+ pjp.getSignature().getDeclaringTypeName() + "."
+ pjp.getSignature().getName());
Object rtv=pjp.proceed();
System.out.println("around开始记录记录结束:"
+ pjp.getSignature().getDeclaringTypeName() + "."
+ pjp.getSignature().getName());
return rtv;
}
}
3、配置文件
<?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: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/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd ">
<bean id="hello" class="cn.com.gan.spring.aop.ImpHello"></bean>
<bean id="before" class="cn.com.gan.spring.aop.XmlLoggerBefore"></bean>
<aop:config>
<aop:aspect id="loggerbefore" ref="before">
<aop:before pointcut="execution(* cn.com.gan.spring.aop.IHello.*(..))"
method="before"/>
</aop:aspect>
</aop:config>
</beans>
或者pointcut重复利用。pointcut包括表达式和签名两部分。其中execution(表达式)格式为execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern) throws-pattern? )。其中参数中(*)表示一个参数,类型为任务,(..)表示零到多个参数。
..表示子包
<?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: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/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd ">
<bean id="hello" class="cn.com.gan.spring.aop.ImpHello"></bean>
<bean id="before" class="cn.com.gan.spring.aop.XmlLoggerBefore"></bean>
<aop:config>
<aop:aspect id="loggerbefore" ref="before">
<aop:pointcut id="beforHello"
expression="execution( * cn.com.gan.spring.aop.IHello.*(..))" />
<aop:before pointcut-ref="beforHello" method="before" />
<aop:after-returning pointcut-ref="beforHello" method="after" />
<aop:around pointcut-ref="beforHello" method="around"/>
</aop:aspect>
</aop:config>
</beans>
如果pointcunt元素定义为cn.com.gan.spring.aop.Hello.*(..)),应该是么有相应的类和方法被代理,但是为什么会报错。测试了下 方法名可以不存在 但是如果相应的类不存在的话会报错。
分享到:
相关推荐
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans ...
1. `<aop:config>`:这是Spring AOP配置的根元素,用于开启基于XML的AOP配置。 2. `<aop:pointcut>`:定义一个切入点,即一组连接点。切入点表达式可以用简单的名称引用,也可以使用AspectJ的表达式语言来精确匹配...
Spring AOP提供了基于XML配置的元数据方式来实现切面,这被称为基于Schema的AOP支持。 1. **创建切面(Aspect)** - 切面通常是一个包含切点(Pointcut)和通知(Advice)的类。在XML配置中,我们需要定义一个`...
**Spring AOP:基于Schema配置的总结与案例** 在Java企业级开发中,Spring框架以其强大的功能和灵活性深受开发者喜爱。其中,Spring AOP(面向切面编程)是解决横切关注点问题的一个重要工具,它允许我们把业务逻辑...
XML配置是Spring AOP早期版本中主要的配置方式,虽然在Spring 4.x及以后版本中,基于注解的配置更加常见,但理解XML配置仍然是学习AOP的基础。 首先,我们需要了解AOP的基本概念: 1. 切面(Aspect):一个关注点的...
本篇文章将深入探讨Spring AOP的Schema实现,即基于XML配置的方式来理解和应用AOP。 一、Spring AOP基础概念 1. 切面(Aspect):切面是关注点的模块化,例如日志、事务管理。在Spring AOP中,切面由通知(Advice...
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans ...
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans ...
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans ...
Spring AOP还支持基于注解的配置,这使得代码更加简洁,但本文主要关注XML配置方式。在实际应用中,你可能需要根据项目需求灵活选择配置方式。 在处理事务时,Spring AOP经常被用来实现声明式事务管理。通过定义...
在Spring1.2或之前的版本中,实现AOP的传统方式就是通过实现Spring的AOP API来定义Advice,并设置代理对象。Spring根据Adivce加入到业务流程的时机的不同,提供了四种不同的Advice:Before Advice、After Advice、...
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans ...
标题中的"spring-aop-4.2.xsd.zip"表明这是一个与Spring框架的AOP(面向切面编程)相关的资源,版本为4.2,并且是XML Schema Definition(XSD)文件的压缩包。XSD文件用于定义XML文档的结构和数据类型,它在Spring...
在Spring AOP中,AspectJ有两种集成方式:一种是基于注解(@Aspect),另一种是基于XML Schema配置。本案例可能侧重于后者,即XML配置方式。这种方式通常在需要更精细控制或与老项目集成时使用。 描述中提到的"NULL...
在`ehcache.xsd`文件中,包含了ehCache的XML Schema定义,用于验证`ehcache.xml`配置文件的语法正确性。这个文件通常不需要我们手动编辑,除非我们需要自定义新的元素或属性。 为了在Spring中使用ehCache,我们需要...
在Spring AOP中,切面可以通过编写Java类或配置XML来定义。 2. 连接点(Join Point):连接点是程序执行的特定点,例如方法的调用或异常的抛出。在Spring AOP中,连接点通常是方法执行的开始和结束。 3. 切入点...
Spring AOP是基于代理的,它可以为普通Java对象(POJOs)提供拦截器模式的功能。本实例将详细介绍如何在Spring 3.2.8版本中实现AOP。 首先,我们需要理解AOP的基本概念。AOP的核心是切面(Aspect),它包含了通知...
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> ``` 这部分...
Spring AOP通过代理模式实现这一目标,支持动态代理(基于JDK)和CGLIB代理(对于无接口的类)。 `spring-aop.xsd`包含了不同版本(2.5、3.1、3.2)的XML配置元素和属性定义,这意味着随着Spring框架的版本更新,...