`

SpringXML方式实现AOP demo

阅读更多
1、新建一个java的工程,导入spring需要的jar包与开发切面需要的jar包。

dist\spring.jar
lib\jakarta-commons\commons-logging.jar
如果使用了切面编程(AOP),还需要下列jar文件
lib/aspectj/aspectjweaver.jar和aspectjrt.jar
lib/cglib/cglib-nodep-2.1_3.jar
如果使用了JSR-250中的注解,如@Resource/@PostConstruct/@PreDestroy,还需要下列jar文件
lib\j2ee\common-annotations.jar

2、Person.java

package cn.ehoo.bean;
/**
 * @author whp
 * @Email whp@ehoo.cn
 * @Jan 4, 2011
 * 
 */
public class Person {
	private Long id;
	private String name;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}



2、PersonService.java 与PersonServiceBean.java

PersonService.java
package cn.ehoo.service;

import cn.ehoo.bean.Person;

/**
 *@author whp
 *@Email whp@ehoo.cn
 *@Jan 4, 2011
 *
 */
public interface PersonService {

	public void save(Person person);

}


PersonServiceBean.java
package cn.ehoo.service.impl;


import cn.ehoo.bean.Person;
import cn.ehoo.service.PersonService;

/**
 * @author whp
 * @Email whp@ehoo.cn
 * @Jan 4, 2011
 * 
 */
public class PersonServiceBean implements PersonService {
	private String user;

	public String getUser() {
		return user;
	}

	public void setUser(String user) {
		this.user = user;
	}

	public PersonServiceBean() {
	}

	public PersonServiceBean(String user) {
		super();
		this.user = user;
	}

	public void save(Person person) {
		System.out.println("执行PerServiceBean的save方法");
		//throw new RuntimeException("======");
	}
}

3、MyInterceptor.java

package cn.ehoo.service.impl;

import org.aspectj.lang.ProceedingJoinPoint;

/**
 * @author whp
 * @Email whp@ehoo.cn
 * @Jan 4, 2011
 * 
 */
public class MyInterceptor {
	private void anyMethod() {
	}
	public void doAccessCheck() {
		System.out.println("执行前置通知");
	}

	public void doReturnCheck() {
		System.out.println("执行后置通知");
	}

	public void doReleaseAction() {
		System.out.println("执行最终通知");
	}

	public void doExceptionAction() {
		System.out.println("执行例外通知");
	}

	public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
		System.out.println("执行环绕通知");
		Object retule = pjp.proceed();
		System.out.println("退出环绕通知");
		return retule;
	}

}


4 在src下对beans.xml进行配置
<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"
	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/aop 
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
	<bean name="personService" class="cn.ehoo.service.impl.PersonServiceBean" />
	<bean name="myInterceptor" class="cn.ehoo.service.impl.MyInterceptor" />
	<aop:config>
		<aop:aspect id="myaop" ref="myInterceptor">
			<aop:pointcut id="mycut" expression="execution(* cn.ehoo.service.impl.PersonServiceBean.*(..))" /><!--切入点表达式 -->
			<aop:before pointcut-ref="mycut" method="doAccessCheck" /><!--前置通知 -->
			<aop:after-returning pointcut-ref="mycut" method="doReturnCheck" /><!--后置通知 -->
			<aop:after-throwing pointcut-ref="mycut" method="doExceptionAction" /><!--例外通知 -->
			<aop:after pointcut-ref="mycut" method="doReleaseAction" /><!--执行最终通知 -->
			<aop:around pointcut-ref="mycut" method="doBasicProfiling" /><!--执行环绕通知-->
		</aop:aspect>
	</aop:config>

</beans>

5、测试类
package junit.test;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.ehoo.bean.Person;
import cn.ehoo.service.PersonService;

/**
 * @author whp
 * @Email whp@ehoo.cn
 * @Jan 4, 2011
 * 
 */
public class AOPTest {
	static PersonService personService;
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		AbstractApplicationContext cxt = new ClassPathXmlApplicationContext("beans.xml");
		personService = (PersonService) cxt.getBean("personService");
	}

	/**
	 * @author whp
	 * @Email whp@ehoo.cn
	 * @Jan 4, 2011
	 * 
	 */
	
	public static void main(String[] args) {
		try {
			setUpBeforeClass();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	@Test
	public void saveTest() {
		personService.save(new Person());
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
	}
}
分享到:
评论

相关推荐

    Spring注解方式实现AOP demo

    本篇将通过注解方式探讨如何在Spring中实现AOP,基于提供的资源,我们可以看到一个实际的Demo项目结构。 首先,我们来看项目的基本结构: 1. `bin`目录:编译后的Java类文件会放在这里。 2. `.settings`目录:包含...

    spring aop demo 两种实现方式

    压缩包中的"aop"文件可能包含了一个简单的Spring AOP示例项目,包括了上述两种实现方式的源代码和配置文件。下载后,可以直接运行以观察AOP如何工作。 总结来说,Spring AOP提供了一种强大的方式来实现横切关注点,...

    SpringAop学习笔记以及实现Demo

    ### 二、AOP实现方式 1. **基于代理的AOP**:Spring提供了两种代理方式,JDK动态代理和CGLIB代理。JDK动态代理主要针对接口实现,而CGLIB代理则针对类实现。 2. **基于注解的AOP**:Spring 2.5开始支持注解驱动的...

    spring注解方式实现aop

    在Spring中,AOP主要分为两种实现方式:基于XML配置和基于注解。本示例主要探讨注解方式。 1. **定义切面(Aspect)** 切面是关注点的模块化,它包含通知(Advice)和切入点(Pointcut)。在Spring中,我们可以...

    Spring-AOP demo

    在Spring中,有两种主要的AOP实现方式:注解驱动和基于XML的配置。在"test_aop_xml"文件中,我们可能会看到XML配置文件,其中定义了切面、通知(advisors)和切点(pointcuts)。 1. **注解驱动的AOP**:Spring支持...

    spring注解aop demo

    Spring注解AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架中的一个重要特性,它使得开发者可以在不修改原有代码的情况下,通过添加注解来实现横切关注点,如日志、事务管理等。下面我们将深入探讨...

    spring-aop实例demo

    本实例将详细介绍如何在Spring 3.2.8版本中实现AOP。 首先,我们需要理解AOP的基本概念。AOP的核心是切面(Aspect),它包含了通知(Advice)和切点(Pointcut)。通知是在特定的连接点(Join Point)执行的代码,...

    spring aop的demo

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强或横切关注点(如日志、事务管理、性能监控等)注入的方式。在本Demo中,我们将深入探讨Spring AOP...

    Spring AOP简单demo

    **Spring AOP实现方式** 1. **注解驱动(Annotation-based)**:使用`@Aspect`注解定义切面,`@Before`, `@After`, `@AfterReturning`, `@AfterThrowing`, `@Around`定义通知,`@Pointcut`定义切入点表达式。 2. *...

    Spring Aop demo

    综上所述,"Spring Aop demo"是一个学习Spring AOP的实践项目,它涵盖了AOP的基本概念、配置方法、代码实现,并提供了可运行的示例。通过深入理解并实践这个项目,开发者可以更好地掌握Spring AOP,并将其应用到自己...

    spring xml 实现aop切面编程

    本篇文章将详细讲解如何通过XML配置实现Spring AOP的切面编程,帮助初学者理解这一核心特性。 首先,我们要了解什么是AOP(Aspect Oriented Programming,面向切面编程)。AOP是一种编程范式,旨在减少代码的重复性...

    Spring xml 方式配制的小demo

    本篇文章主要讲解Spring框架中的XML配置方式,帮助开发者理解如何通过XML配置文件来管理Bean的生命周期和装配。 1. **Spring XML配置基础** Spring框架的配置文件通常以`applicationContext.xml`命名,这是Spring...

    一个简单的aop demo

    这个简单的AOP demo展示了如何通过Spring AOP实现关注点的解耦,使得日志记录等横切关注点可以在不侵入业务代码的情况下进行。实际应用中,你可以根据需要添加更多的通知类型和切面,以处理更多类型的关注点。

    spring2.5AOPdemo详细资料

    这个"spring2.5AOPdemo详细资料"很可能是针对Spring 2.5版本的一个AOP实战示例,帮助开发者了解并掌握AOP的概念、原理以及在实际开发中的应用。 AOP的核心概念包括切面(Aspect)、通知(Advice)、连接点(Join ...

    SpringAop两种配置demo

    Spring AOP通过XML配置和注解配置都能实现相同的功能,但注解方式更简洁、直观,易于理解和维护。选择哪种方式取决于项目需求和个人喜好。在实际应用中,可以根据项目的规模和团队习惯灵活选择。了解并熟练掌握这两...

    Spring AOP应用Demo

    **Spring AOP应用Demo** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要模块,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。这个Demo是针对Spring AOP的...

    struts2+spring aop demo

    在"struts2+spring aop demo"这个项目中,我们将探讨如何结合这两个框架,利用Spring的AOP功能来记录操作日志,特别是涉及自定义参数的AOP例子。 首先,让我们了解AOP的概念。面向切面编程(Aspect Oriented ...

    Spring AOP demo (maven)

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理等。在本示例中,我们将深入探讨如何在Maven项目中设置和使用Spring AOP...

    spring-aop demo及junit测试

    在`aopDemo`项目中,你可以找到上述配置和测试的实例代码。通过运行这些测试,我们可以确保Spring AOP配置无误,同时验证切面逻辑在实际操作中的行为。 总的来说,Spring AOP提供了强大的切面编程能力,让我们能够...

Global site tag (gtag.js) - Google Analytics