`
zxmsdyz
  • 浏览: 127715 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Spring AOP使用配置介绍(五):基于Schema配置的aop

阅读更多
如果项目中不能使用JDK5.0,那就无法使用基于@AspectJ注解的切面。但是我们仍可以使用AspectJ切点表达式,可以用Schema配置的方法来代替。

首先定义一个增强:
package com.maxjay.bank.advice.schema;

import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;

import com.maxjay.bank.model.TSysUser;

public class LoggerAdvice {
	private Logger logger = Logger.getLogger(LoggerAdvice.class);

	/**
	 * JoinPoint为连接点的信息,可以通过jp获取到代理类的类型、要执行的方法及其参数
	 * @param jp
	 */
	public void preLogger(JoinPoint jp) {
		logger.info("前置增强,使用schema方法配置");
		StringBuffer sb = new StringBuffer();
		for(Object s:jp.getArgs()){
			sb.append(s.toString()+",");
		}
		logger.info("代理对象执行的方法名为:" + jp.getSignature().getName() + ",方法参数为:"
				+ sb.toString());
	}
	
	/**
	 * JoinPoint为连接点的信息,可以通过jp获取到代理类的类型、要执行的方法及其参数
	 * @param jp
          * @param user 代理方法的返回值
	 */
	public void postLogger(JoinPoint jp, TSysUser user) {
		logger.info("后置增强,代理对象执行的结果返回值为:" + user.getUserName());
	}
}


注意该增强中没有注解也没有继承任何的接口,只是一个普通的类。该如何让spring辨别出它是一个增强呢?这就需要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:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:lang="http://www.springframework.org/schema/lang"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
     此段头部声明必须添加,尤其是aop的声明部分,否则下面的配置无法使用
       .........
	<!-- 使用schema方式配置aop -->
	<!-- 将要使用的增强类定义成bean -->
	<bean id="loggerAdvice" class="com.maxjay.bank.advice.schema.LoggerAdvice" />
	
	<aop:config proxy-target-class="true">
		<aop:aspect ref="loggerAdvice">
			<aop:before method="preLogger"
				pointcut="target(com.maxjay.bank.service.impl.TestAdviceService) and execution(* validateUser(..))" />
			<aop:after-returning method="postLogger"
				pointcut="target(com.maxjay.bank.service.impl.TestAdviceService) and execution(* validateUser(..))" returning="user"/>
		</aop:aspect>
	</aop:config>

     <aop:config>中的proxy-target-class可以决定使用哪种代理技术,设置为true表示使用cglib代理,false表示使用jdk动态代理,<aop:config>可以定义多个,不同的<aop:config>可以采用不同的代理技术。
      <aop:aspect>中可以定义多个增强,上面的例子中<aop:before>定义的是前置增强,<aop:after-returning>定义的是后置增强。还可以用<aop:around>定义环绕增强,<aop:after-throwing>定义异常抛出异常,<aop:after>定义final增强(相当于后置增强和异常抛出增强的联合体),<aop:declare-parents>定义引介增强。
      <aop:after-returning>中的method指定了增强类中的增强方法;pointcut用来指定切面,采用的是AspectJ表达式;returning指定的是返回值在增强方法中的参数名,与上一篇中@AspectJ注解增强相似。

使用schema还可以用旧方法定义的增强:
	<!-- 使用文章(一)中用接口方法定义的增强 -->
	<bean id="loggerBeforeAdvice" class="com.maxjay.bank.advice.LoggerBeforeAdvice" />
	<aop:config proxy-target-class="true">
		<aop:advisor advice-ref="loggerBeforeAdvice"
			pointcut="target(com.maxjay.bank.service.impl.TestAdviceService) and execution(* validateUser(..))" />
	</aop:config>
分享到:
评论

相关推荐

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

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

    基于注解配置和使用spring AOP(spring mvc框架)

    本篇文章将深入探讨如何在Spring MVC中配置和使用基于注解的AOP。 一、Spring AOP基础知识 1. **切面(Aspect)**:切面是关注点的模块化,例如日志、事务管理等。在Spring AOP中,切面可以是Java类或@Aspect注解...

    SpringAop xml方式配置通知

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

    Spring之AOP配置文件详解

    ### Spring之AOP配置文件详解 #### 一、前言 在Java开发中,Spring框架因其强大的功能和灵活的配置而被广泛应用于企业级应用的开发。其中,面向切面编程(Aspect Oriented Programming,简称AOP)是Spring框架的...

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

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

    Spring Aop Schema实现

    在Spring的XML配置文件中,我们可以使用 `&lt;aop:config&gt;` 标签来开启AOP功能,并定义切面、切点和通知。 1. 开启AOP支持: ```xml &lt;aop:config&gt; &lt;!-- 配置切面 --&gt; &lt;aop:aspect id="loggingAspect" ref="logging...

    Spring AOP源码深度解析:掌握Java高级编程核心技术

    **Schema-based配置**使用Spring的AOP命名空间,直接在XML中定义切面。**@AspectJ注解配置**是最为直观的方式,通过在切面类上使用@Aspect、@Pointcut、@Before等注解,可以直接在Java代码中声明切面逻辑。 Spring ...

    spring-aop-aspectj(Schema)-case

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

    spring aop的两种配置方式.docx

    **一、基于XML的Spring AOP配置** 在传统的Spring AOP配置中,我们通常会在`applicationContext.xml`或类似的配置文件中定义切面、通知(advice)、切入点(pointcut)等元素。以下是一个简单的示例: ```xml ...

    spring2-aop.pdf

    - **使用基于 Schema 的配置文件配置 Spring AOP**:使用 XML 配置文件来定义切面和通知。 - **使用 Java 5 注解配置及使用 Spring AOP**:利用注解简化 AOP 配置。 - **基于 API 方式来使用 Spring AOP**:通过编程...

    spring-aop实例demo

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

    利用SPring AOP配置切面的一个例子

    2. **配置切面**:使用`&lt;aop:config&gt;`元素来配置切面。其中`&lt;aop:aspect&gt;`表示一个切面,`ref`属性指定了切面Bean的引用。 3. **前置通知**:`&lt;aop:before&gt;`元素定义了前置通知,`method`属性指定了通知方法,`...

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

    4. **启动Spring容器**:使用`ClassPathXmlApplicationContext`或者`FileSystemXmlApplicationContext`加载配置文件,创建Spring容器,然后从容器中获取bean并使用。 通过`spring-core`库,我们可以利用Spring的...

    spring-aop.xsd

    `spring-aop.xsd`文件是Spring AOP配置的XML Schema定义文件,用于指导和验证XML配置中的元素和属性,确保其符合规范,同时也为IDE提供代码提示和自动补全功能,提高开发效率。 在Java开发中,AOP(Aspect Oriented...

    SpringAOP依赖包

    2. 配置切面:在Spring的配置文件(如`applicationContext.xml`)中,通过`&lt;aop:config&gt;`元素定义切面。例如,定义一个名为`loggingAspect`的切面: ```xml &lt;aop:config&gt; &lt;aop:aspect id="loggingAspect" ref=...

    Spring AOP配置源码

    此单元测试基于spring的AbstractJUnit4SpringContextTests,你需要添加spring的关于单元测试的支持 在类上标注@ContextConfiguration(locations="classpath:applicationContext.xml")意思是去classpath路径下加载...

    XML配置SpringAOP共2页.pdf.zip

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

Global site tag (gtag.js) - Google Analytics