`
白色熊猫
  • 浏览: 17544 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

基于API 的spring aop(XML Schema)

阅读更多
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.*(..)),应该是么有相应的类和方法被代理,但是为什么会报错。测试了下 方法名可以不存在 但是如果相应的类不存在的话会报错。
分享到:
评论

相关推荐

    SpringAop xml方式配置通知

    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—— Schema

    1. `&lt;aop:config&gt;`:这是Spring AOP配置的根元素,用于开启基于XML的AOP配置。 2. `&lt;aop:pointcut&gt;`:定义一个切入点,即一组连接点。切入点表达式可以用简单的名称引用,也可以使用AspectJ的表达式语言来精确匹配...

    Spring aop 基于schema的AOP支持及JoinPoint的使用、如何使用CGLIB代理

    Spring AOP提供了基于XML配置的元数据方式来实现切面,这被称为基于Schema的AOP支持。 1. **创建切面(Aspect)** - 切面通常是一个包含切点(Pointcut)和通知(Advice)的类。在XML配置中,我们需要定义一个`...

    Spring AOP之基于Schema配置总结与案例

    **Spring AOP:基于Schema配置的总结与案例** 在Java企业级开发中,Spring框架以其强大的功能和灵活性深受开发者喜爱。其中,Spring AOP(面向切面编程)是解决横切关注点问题的一个重要工具,它允许我们把业务逻辑...

    spring aop xml实现

    XML配置是Spring AOP早期版本中主要的配置方式,虽然在Spring 4.x及以后版本中,基于注解的配置更加常见,但理解XML配置仍然是学习AOP的基础。 首先,我们需要了解AOP的基本概念: 1. 切面(Aspect):一个关注点的...

    Spring Aop Schema实现

    本篇文章将深入探讨Spring AOP的Schema实现,即基于XML配置的方式来理解和应用AOP。 一、Spring AOP基础概念 1. 切面(Aspect):切面是关注点的模块化,例如日志、事务管理。在Spring AOP中,切面由通知(Advice...

    javaXML方式实现SpringAop编程(源码+jar包)

    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依赖jar包

    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(spring mvc框架)

    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 ...

    XML配置SpringAOP共2页.pdf.zip

    Spring AOP还支持基于注解的配置,这使得代码更加简洁,但本文主要关注XML配置方式。在实际应用中,你可能需要根据项目需求灵活选择配置方式。 在处理事务时,Spring AOP经常被用来实现声明式事务管理。通过定义...

    spring aop 实现源代码--xml and annotation(带lib包)

    在Spring1.2或之前的版本中,实现AOP的传统方式就是通过实现Spring的AOP API来定义Advice,并设置代理对象。Spring根据Adivce加入到业务流程的时机的不同,提供了四种不同的Advice:Before Advice、After Advice、...

    Spring AOP + AspectJ in XML 配置示例

    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.xsd.zip"表明这是一个与Spring框架的AOP(面向切面编程)相关的资源,版本为4.2,并且是XML Schema Definition(XSD)文件的压缩包。XSD文件用于定义XML文档的结构和数据类型,它在Spring...

    spring-aop-aspectj(Schema)-case

    在Spring AOP中,AspectJ有两种集成方式:一种是基于注解(@Aspect),另一种是基于XML Schema配置。本案例可能侧重于后者,即XML配置方式。这种方式通常在需要更精细控制或与老项目集成时使用。 描述中提到的"NULL...

    Spring AOP+ehCache简单缓存系统解决方案

    在`ehcache.xsd`文件中,包含了ehCache的XML Schema定义,用于验证`ehcache.xml`配置文件的语法正确性。这个文件通常不需要我们手动编辑,除非我们需要自定义新的元素或属性。 为了在Spring中使用ehCache,我们需要...

    SpringAOP依赖包

    在Spring AOP中,切面可以通过编写Java类或配置XML来定义。 2. 连接点(Join Point):连接点是程序执行的特定点,例如方法的调用或异常的抛出。在Spring AOP中,连接点通常是方法执行的开始和结束。 3. 切入点...

    spring-aop实例demo

    Spring AOP是基于代理的,它可以为普通Java对象(POJOs)提供拦截器模式的功能。本实例将详细介绍如何在Spring 3.2.8版本中实现AOP。 首先,我们需要理解AOP的基本概念。AOP的核心是切面(Aspect),它包含了通知...

    Spring之AOP配置文件详解

    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"&gt; ``` 这部分...

    spring-aop.xsd

    Spring AOP通过代理模式实现这一目标,支持动态代理(基于JDK)和CGLIB代理(对于无接口的类)。 `spring-aop.xsd`包含了不同版本(2.5、3.1、3.2)的XML配置元素和属性定义,这意味着随着Spring框架的版本更新,...

Global site tag (gtag.js) - Google Analytics