`
sunjiesh
  • 浏览: 100681 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring AOP概念学习(四)-基于schema的aop支持

阅读更多

      看了文档,基于@JAspect支持的Spring AOP不知什么原因,编写相关的例子程序,没有运行成功,所以暂时不能写出来供大家交流,如果调试出来后,一定补上。现在先来看看Spring中另一种AOP的支持-基于Schema的AOP支持。

      和以前一样,还是先把例子程序写出来,有什么注意的地方会在稍后注明。

      1、通知

 

package com.javaeye.sunjiesh.aop.aspect;

public class AspectExample {

	/**
	 * 前置通知(Before advice)
	 */
	public void beforeAdvice() {
		System.out.println("beforeAdvice");
	}

	/**
	 * 带参数的前置通知(Before advice)
	 * @param parameter 
	 */
	public void beforeAdvice2(String parameter){
		System.out.println("beforeAdvice2");
		System.out.println("parameter is "+parameter);
	}
	
	/**
	 * 后通知(After (finally) advice)
	 */
	public void afterAdvice() {
		System.out.println("afterAdvice");
	}

	/**
	 * 返回后通知(After returning advice)
	 * @param parameter 连接点运行后返回的参数
	 */
	public void afterReturnAdvice(String parameter) {
		System.out.println("afterReturnAdvice");
		System.out.println("parameter is "+parameter);
	}

	/**
	 * 抛出异常后通知(After throwing advice)
	 * @param ex 连接点运行时发生的异常
	 */
	public void afterThrowingAdvice(Exception ex) {
		System.out.println("afterThrowingAdvice");
		System.out.print(ex.getMessage());
	}

	/**
	 * 环绕通知(Around Advice)
	 */
	public void aroundAdvice() {
		System.out.println("aroundAdvice");
	}
}
 

      2、连接点

 

package com.javaeye.sunjiesh.aop.aspect;

public class ServiceExample {

	public void adviceTest(){
		System.out.println("adviceTest is run");
	}
	
	public String  adviceTest2(){
		System.out.println("adviceTest2 is run");
		try {
			throw new Exception();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			//e.printStackTrace();
			System.out.println(e.getMessage());
		}finally{
			return null;
		}			
	}
}
 

      3、spring配置文件

 

<?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" xmlns:tx="http://www.springframework.org/schema/tx"
	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/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
				http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
	<bean id="aspectExample" class="com.javaeye.sunjiesh.aop.aspect.AspectExample"></bean>
	<bean id="serviceExample" class="com.javaeye.sunjiesh.aop.aspect.ServiceExample"></bean>
	<bean id="serviceExample2" class="com.javaeye.sunjiesh.aop.aspect.ServiceExample2"></bean>
	
	<aop:config>
		<aop:aspect id="myAspect" ref="aspectExample">
			<aop:pointcut id="myPointcut"
				expression="execution(* com.javaeye.sunjiesh.aop.aspect.ServiceExample.*(..))" />
			<aop:before method="beforeAdvice" pointcut-ref="myPointcut" />
			<aop:after method="afterAdvice" pointcut-ref="myPointcut" />
			<aop:after-returning method="afterReturnAdvice"
				returning="parameter" pointcut-ref="myPointcut" />
			<aop:after-throwing method="afterThrowingAdvice"
				throwing="ex" pointcut-ref="myPointcut" />
		</aop:aspect>
	</aop:config>
	<aop:config>
		<aop:aspect id="myAspect2" ref="aspectExample">
			<aop:pointcut id="myPointcut2"
				expression="execution(* com.javaeye.sunjiesh.aop.aspect.ServiceExample2.adviceTest(String)) and args(parameter)" />
			<aop:before method="beforeAdvice2" pointcut-ref="myPointcut2" />
		</aop:aspect>
	</aop:config>
</beans>
 

      4、主函数

 

package com.javaeye.sunjiesh.aop.aspect;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AspectMain {

	public static void main(String args[]) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"spring-beans4.xml");
		ServiceExample serviceExample=(ServiceExample) ctx.getBean("serviceExample");
		serviceExample.adviceTest();
		serviceExample.adviceTest2();
		
		System.out.println("使用通知参数");
		ServiceExample2 serviceExample2=(ServiceExample2) ctx.getBean("serviceExample2");
		serviceExample2.adviceTest("hello");
	}
}
1
0
分享到:
评论

相关推荐

    spring-framework-4.2.5-schema

    在4.2.5版本中,Spring引入了对各种XML Schema的支持,极大地简化了配置过程,提高了代码的可读性和可维护性。本文将深入探讨这些schema,以及它们如何帮助开发者更好地理解和使用Spring Framework。 首先,我们来...

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

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

    spring-aop-aspectj(Schema)-case

    标题 "spring-aop-aspectj(Schema)-case" 指涉的是Spring AOP(面向切面编程)中使用AspectJ的Schema配置方式的一个案例。Spring AOP是Spring框架的一部分,它允许我们在不修改源代码的情况下,通过"切面"来实现对...

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

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

    spring-aop-3.0.xsd spring-beans-3.0 spring-context-3.0.xsd spring-mvc-3.1.xsd

    `spring-aop-3.0.xsd` 是 Spring AOP 的 XML 配置文件,定义了与 AOP 相关的元素和属性。例如,你可以在这里定义切入点(pointcut)、通知(advises)以及代理配置。将此文件添加到 Eclipse 的 XML 目录(catalog)...

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

    **Spring AOP 基于Schema的AOP支持** 在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许我们定义横切关注点,如日志、事务管理等,这些关注点可以独立于业务逻辑进行管理。Spring AOP提供了基于XML...

    Spring AOP依赖jar包

    本篇文章将详细介绍 Spring AOP 的核心概念、如何配置以及所依赖的 Jar 包,特别是 `AspectJ 1.6.12` 版本。 1. **AOP 概念** - **切面(Aspect)**:切面是关注点的模块化,如日志、事务管理等,它们横切多个对象...

    spring-5.2.9.RELEASE-schema.zip

    本次我们聚焦于"spring-5.2.9.RELEASE-schema.zip"压缩包,通过其包含的子文件,深入探讨Spring 5.2.9版本的关键概念和组件。 1. **Mvc(Model-View-Controller)模块**: Spring MVC是Spring框架的一个重要组成...

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

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

    Spring Aop Schema实现

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

    spring-5.2.9.RELEASE-dist.zip(spring-framework-5.2.9.RELEASE)

    开发者可以通过阅读这些文档,理解Spring的核心概念,如依赖注入(Dependency Injection)、AOP(面向切面编程)、MVC(Model-View-Controller)框架、数据访问等,从而更好地利用Spring进行应用开发。 库文件...

    SpringAop xml方式配置通知

    3. 在配置AOP时,确保Spring容器已经启用AOP支持,即`&lt;aop:config&gt;`标签的存在。 通过上述XML配置,我们可以灵活地控制Spring AOP的各个元素,实现面向切面的编程,提升代码的可读性和可维护性。了解并熟练掌握这些...

    spring-aop实例demo

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

    征服Spring AOP—— Schema

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

    spring-framework-4.3.30.RELEASE-dist.zip

    每个jar包都有特定的功能,例如`spring-context`负责上下文管理,`spring-beans`处理Bean的生命周期,`spring-web`支持Web应用程序,还有其他如AOP(面向切面编程)、JDBC、ORM(对象关系映射)等模块。开发者可以...

    Spring2.5和Hibernate3集成--学习spring aop ioc

    Spring2.5和Hibernate3集成 采用声明式事务 1.声明式事务的配置 * 配置sessionFactory * 配置事务管理器 * 配置事务的传播特性 * 配置哪些类哪些方法使用事务 2.编写业务逻辑方法 * 继承...

    关于Spring的spring-beans-xsd和tx-xsd aop-xsd等

    在给定的压缩包中,包含了`spring-beans-3.0.xsd`、`spring-context-3.0.xsd`、`spring-aop-3.0.xsd`和`spring-tx-3.0.xsd`这四个重要的XSD文件,它们分别对应Spring框架的不同核心模块。 1. **spring-beans-3.0....

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

    1. **配置Spring容器**:首先,我们需要一个Spring配置文件(如`springstudy02/spring-context.xml`),在其中定义bean并启用AOP支持。例如: ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" ...

Global site tag (gtag.js) - Google Analytics