`
MySSH
  • 浏览: 64109 次
  • 性别: Icon_minigender_1
  • 来自: 贵阳
社区版块
存档分类
最新评论

Spring2.0中的AOP使用(配置applicationContext.xml核心文件中)

阅读更多
1、Spring AOP部分使用JDK动态代理或者CGLIB来为目标对象创建代理。(创建推荐尽量使用JDK动态代理)如果被代理的目标对象实现了至少一个接口,则会使用JDK动态代理。所有目标类型实现的接口都被代理。若改目标对象没有实现任何接口,则创建一个CGLIB代理。
2、Spring2.0中的Pointcut定义?
Pointcut是JoinPoint的集合,它是程序中需要注入Advice的位置的集合,在Spring2.0中,Pointcut的定义包括两个部分:Pointcut表达式(expression)和Pointcut签名(signature)。
3、基于XML Schema的前置通知
  1、Java代码如下:

package com.zuxia.advice;

import org.aspectj.lang.JoinPoint;

public class FrontLogAdvice {
	//JoinPoint(连接点)连接点是应用程序执行过程中插入Aspect的地点,这个地点可以方法调用,
	//异常抛出等时刻
	public void printLog(JoinPoint joinPoint) {
		System.out.print("*************");
		System.out.print(joinPoint.getTarget().toString());
		System.out.print(" ");
		System.out.print(joinPoint.getSignature().getName());
		System.out.print("(");
		Object[] args =joinPoint.getArgs();
		for (int i = 0; i < args.length; i++) {
			System.out.print(args[i]);
			 if(i<args.length - 1){
				 System.out.print(",");
			 }
		}
		System.out.print(")");
		System.out.println(" *************");
	}
}

2、其次在applicationContext.xml核心文件配置如下:
  <!-- 配置方法前置通知的第二中方式,推荐采用这种方式,因为它不会和事务配置冲突(开始) -->
  
 <bean id="frontLogAdvice" class="com.zuxia.advice.FrontLogAdvice"></bean>
    <aop:config>
      <!-- 配置一个切面 -->
      <aop:aspect id="frontLog" ref="frontLogAdvice">
      <!-- 配置切点,指定将通知注入到哪些类的哪些方法上 -->
      <aop:pointcut id="serviceMethod" expression="execution(* com.zuxia.service.*.*(..))"/>
      <!-- 配置一个前置通知-->
         <aop:before method="printLog" pointcut-ref="serviceMethod"/>
  </aop:aspect>
    </aop:config>

4、基于XML Schema的后置通知:
  1、Java代码如下:
package com.zuxia.advice;

import org.aspectj.lang.JoinPoint;

public class AfterLogAdvice {
	//JoinPoint(连接点)连接点是应用程序执行过程中插入Aspect的地点,这个地点可以方法调用,
	//异常抛出等时刻
	public void printAfterLog(JoinPoint joinPoint) {
		System.out.print("*************");
		System.out.print(joinPoint.getTarget().toString());
		System.out.print(" ");
		System.out.print(joinPoint.getSignature().getName());
		System.out.print("(");
		Object[] args =joinPoint.getArgs();
		for (int i = 0; i < args.length; i++) {
			System.out.print(args[i]);
			 if(i<args.length - 1){
				 System.out.print(",");
			 }
		}
		System.out.print(")");
		System.out.println(" *************");
	}
}

  2、其次在applicationContext.xml核心文件配置如下:
  <!-- 配置方法后置通知的第二中方式,推荐采用这种方式,因为它不会和事务配置冲突(开始) -->
   
<bean id="afterLogAdvice" class="com.zuxia.advice.AfterLogAdvice"></bean>
    <aop:config>
      <!-- 配置一个切面 -->
      <aop:aspect id="afterLog" ref="AfterLogAdvice">
      <!-- 配置切点,指定将通知注入到哪些类的哪些方法上 -->
      <aop:pointcut id="serviceMethod" expression="execution(* com.zuxia.service.*.*(..))"/>
      <!-- 配置一个后置通知-->
         <aop:after method="printAfterLog" pointcut-ref="serviceMethod"/>
  </aop:aspect>
    </aop:config>

5、基于XML Schema的环绕通知
  1、Java代码如下:
package com.zuxia.advice;

import org.aspectj.lang.ProceedingJoinPoint;

public class ProceedAdvice {
	public void printProceedLog(ProceedingJoinPoint joinpoint){
		System.out.print("***************** ");
		System.out.print(joinpoint.getTarget().toString());
		System.out.print(" ");
		System.out.print(joinpoint.getSignature().getName());
		System.out.print("(");
		Object[] args = joinpoint.getArgs();
		for (int i = 0; i < args.length; i++) {
			System.out.print(args[i]);
			if (i < args.length - 1) {
				System.out.print(", ");
			}
		}
		System.out.print(")");
		System.out.println(" ***************** begin");
		
		try {
			joinpoint.proceed();
		} catch (Throwable e) {
			e.printStackTrace();
		}
		
		System.out.print("***************** ");
		System.out.print(joinpoint.getTarget().toString());
		System.out.print(" ");
		System.out.print(joinpoint.getSignature().getName());
		System.out.print("(");
		for (int i = 0; i < args.length; i++) {
			System.out.print(args[i]);
			if (i < args.length - 1) {
				System.out.print(", ");
			}
		}
		System.out.print(")");
		System.out.println(" ***************** end");
	}
}

2、applicationContext.xml核心文件配置如下:
<!-- 配置方法环绕型通知的第二中方式,推荐采用这种方式,因为它不会和事务配置冲突(开始) -->
   
<bean id="proceedAdvice" class="com.zuxia.advice.ProceedAdvice"></bean>
    <aop:config>
      <!-- 配置一个切面 -->
      <aop:aspect id="proceedlog" ref="proceedAdvice">
      <!-- 配置切点,指定将通知注入到哪些类的哪些方法上 -->
      <aop:pointcut id="serviceMethod" expression="execution(* com.zuxia.service.*.*(..))"/>
      <!-- 配置一个环绕型通知-->
         <aop:after method="printProceedLog" pointcut-ref="serviceMethod"/>
  </aop:aspect>
    </aop:config>

6、基于XML Schema的异常通知
  1、Java代码如下:
package com.zuxia.advice;

import org.aspectj.lang.JoinPoint;


public class ExceptionAdvice {
	public void printExceptionLog(JoinPoint joinpoint){//不推荐使用Throwable对象,没必要打印堆栈
		System.out.print("***************** ");
		System.out.print(joinpoint.getTarget().toString());
		System.out.print(" ");
		System.out.print(joinpoint.getSignature().getName());
		System.out.print("(");
		Object[] args = joinpoint.getArgs();
		for (int i = 0; i < args.length; i++) {
			System.out.print(args[i]);
			if (i < args.length - 1) {
				System.out.print(", ");
			}
		}
		System.out.print(")");
		System.out.println(" *****************");
		//打印异常堆栈信息
        //System.out.println(throwable.getStackTrace());
	}
}
 
2、applicationContext.xml核心文件配置如下:
  <!-- 配置方法异常通知的第二中方式,推荐采用这种方式,因为它不会和事务配置冲突(开始) -->
   
<bean id="exceptionAdvice" class="com.zuxia.advice.ExceptionAdvice"></bean>
    <aop:config>
      <!-- 配置一个切面 -->
      <aop:aspect id="exceptionlog" ref="exceptionAdvice">
      <!-- 配置切点,指定将通知注入到哪些类的哪些方法上 -->
      <aop:pointcut id="serviceMethod" expression="execution(* com.zuxia.service.*.*(..))"/>
      <!-- 配置一个异常通知-->
         <aop:after method="printExceptionLog" pointcut-ref="serviceMethod"/>
  </aop:aspect>
    </aop:config>
1
1
分享到:
评论

相关推荐

    applicationContext.xml

    applicationContext适合初学者编写spring容器程序学习需要

    spring考试通过必备材料.docx

    在applicationContext.xml中配置映射文件 14 编写JSP,Action类,Service接口类,Service实现类,DAO接口类,DAO实现类 15 Jsp添加 15 Jsp修改 15 Jsp主界面 16 *Action,Action类 16 *Service,Service接口类 18 *...

    Spring 2.0 开发参考手册

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 ...

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

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

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1....

    Spring AOP配置源码

    @Component("userService")等价于在spring配置文件中定义一个&lt;bean id="userService"/&gt; @Resource(name="userDAO")将userDA注入进来 写一个拦截器的类 package com.spring.aop; import org.springframework....

    J2EE_Spring之AOP与依赖注入例子

    J2EE_Spring之AOP与依赖注入例子, Spring包请自己添加。 注意下面两个配置文件: web.xml Spring配置文件applicationContext.xml

    spring chm文档

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 ...

    Spring API

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.6.1. 理解AOP代理 6.7. 以编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ进行domain ...

    Spring中文帮助文档

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.6.1. 理解AOP代理 6.7. 以编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ进行domain ...

    spring学习笔记

    Spring 的配置文件:..........................................................................................................7 1.3.4 在配置中配置类:........................................................

    spring4.1核心包

    可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI 所需的全部类,instrumentation组件以及校验Validation 方面的相关类。 外部依赖spring-beans, (spring-aop)。 5. spring-context-support-4.1.1....

    学习spring ioc和aop

    spring 核心功能演示项目 1. applicationContext xml方式和注解方式配置 2. pring bean循环依赖。 3. spring bean 启动顺序。 4. BeanDefinition编程式注入到容器。 5. spring aop 打印 6. spring 事务

    spring applicationContext 配置文件

    &lt;description&gt;Spring公共配置文件 &lt;!-- mes 的數據庫 --&gt; &lt;bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"&gt; &lt;property name="driverClass" value="oracle....

    struts hibernate spring 集成时使用依赖注解的方式的秘籍

    //applicationContext.xml文件中添加 &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...

    Spring面试题含答案.pdf

    12. Spring 配置文件 13. 什么是 Spring IOC 容器? 14. IOC 的优点是什么? 15. ApplicationContext 通常的实现是什么? 16. Bean 工厂和 Application contexts 有什么区别? 17. 一个 Spring 的应用看起来象什么...

    【Maven配置四】配置Spring+整合MyBatis实现动态扫描开发

    文章目录动态扫描过程图配置xml配置pom.xml配置ApplicationContext.xml提供bean和mapper实现访问数据库 Spring框架是一个开放源代码的J2EE应用程序框架,它使得我们的开发过程更简单,可以大大减少工作量,提高效率...

    百度BAE环境下的ssh应用

    3、struts2的配置采用xml(目前不支持annotation),spring和hibernate使用annotation配置; 4、开发者下载该应用后,只需修改WebRoot\WEB-INF\applicationContext.xml,将其中数据库连接信息修改为自己的即可;

    SSH2框架搭建实例

    3、struts2的配置采用xml(目前不支持annotation),spring和hibernate使用annotation配置; 4、开发者下载该应用后,只需修改WebRoot\WEB-INF\applicationContext.xml,将其中数据库连接信息修改为自己的即可;

Global site tag (gtag.js) - Google Analytics