`
在水伊方
  • 浏览: 111531 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Spring 基于基于XML配置方式实现AOP

阅读更多

要进行AOP编程,首先我们要在spring的配置文件中引入aop命名空间:

<?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"
	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">

</beans>  

 

PersonService接口

package org.spring.service;

public interface PersonService {
	public void save(String name);

	public void update(String name, Integer id);

	public String getPersonName(Integer id);
}

 

PersonService的实现类PersonServiceBean

package org.spring.service.impl;

import org.spring.service.PersonService;

public class PersonServiceBean implements PersonService {
	public String getPersonName(Integer id) {
		System.out.println("我是getPersonName()方法");
		return "xxx";
	}

	public void save(String name) {
		System.out.println("我是save()方法");
	}

	public void update(String name, Integer id) {
		System.out.println("我是update()方法");
	}

}

 

切面

package org.spring.service;

import org.aspectj.lang.ProceedingJoinPoint;

public class MyInterceptor {
	public void doAccessCheck() {
		System.out.println("前置通知");
	}

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

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

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

	public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
		System.out.println("进入方法");
		Object result = pjp.proceed();
		System.out.println("退出方法");
		return result;
	}
}

 

我们还需要把PersonServiceBean与MyInterceptor交于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"
	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 id="personServiceBean" class="org.spring.service.impl.PersonServiceBean" />
	<bean id="myInterceptor" class="org.spring.service.MyInterceptor" />

	<aop:config>
		<aop:aspect id="asp" ref="myInterceptor">
			<aop:pointcut id="mycut" expression="execution(* org.spring.service..*.*(..))" />
			<aop:before pointcut-ref="mycut" method="doAccessCheck" />
			<aop:after-returning pointcut-ref="mycut" method="doAfterReturning" />
			<aop:after-throwing pointcut-ref="mycut" method="doAfterThrowing" />
			<aop:after pointcut-ref="mycut" method="doAfter" />
			<aop:around pointcut-ref="mycut" method="doBasicProfiling" />
		</aop:aspect>
	</aop:config>
</beans>  

 

测试类

package org.spring.junit;

import org.junit.Test;
import org.spring.service.PersonService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest {
	@Test
	public void test() {
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"spring.xml");

		PersonService personService = (PersonService) ctx
				.getBean("personServiceBean");
		
		personService.save("xxx");
	}
}

 

控制台打印结果为:

前置通知
进入方法
我是save()方法
后置通知
最终通知
退出方法

 

分享到:
评论

相关推荐

    spring aop注解方式、xml方式示例

    下面将详细介绍Spring AOP的注解方式和XML配置方式。 ### 注解方式 #### 1. 定义切面(Aspect) 在Spring AOP中,切面是包含多个通知(advisors)的类。使用`@Aspect`注解标记切面类,例如: ```java @Aspect ...

    Spring AOP 的实现例子(基于XML配置实现)

    XML配置是Spring AOP早期的主要实现方式,虽然现在有更简洁的注解式配置,但理解XML配置方式对于深入理解AOP原理仍然很有帮助。下面我们将详细探讨如何通过XML配置实现Spring AOP。 首先,我们需要在Spring配置文件...

    SpringAop xml方式配置通知

    **Spring AOP XML方式配置通知** 在Java世界中,Spring框架是广泛应用的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器。AOP允许开发者定义“方面”,这些方面可以封装关注点,如日志、事务...

    spring 2.0使用AOP实例(基于XML的配置方式)

    在基于XML的配置方式下,我们将通过这些概念来理解Spring 2.0的AOP实现。 1. **切面(Aspect)**:一个关注点的模块化,例如日志记录、事务管理等。在Spring中,切面可以由一个或多个通知以及定义它们何时何地触发...

    使用Spring配置文件实现AOP

    这篇教程将详细讲解如何通过Spring的配置文件来实现AOP。 一、理解AOP概念 AOP的核心思想是将分散在各个模块中的交叉性代码(如日志、事务处理)抽取出来,形成独立的切面,以便于复用和维护。它提供了一种模块化的...

    用xml配置的方式进行SpringAOP开发

    本篇文章主要讲解如何通过XML配置来实现Spring AOP的开发。 首先,了解AOP的基本概念。AOP通过“切面”(Aspect)来封装横切关注点,切面由“通知”(Advice)和“连接点”(Join Point)组成。通知是在特定连接点...

    基于xml的SpringAOP实例

    在基于XML的配置方式下,Spring AOP提供了直观且灵活的声明式方法来实现这些关注点的分离,使得业务逻辑代码更为简洁。 在Spring AOP中,我们首先需要定义一个切面(Aspect),它包含了若干个通知(Advice)。通知...

    Spring_AOP_XML配置

    **Spring AOP XML配置**是Spring框架中一种重要的面向切面编程(Aspect-Oriented Programming,简称AOP)实现方式,允许开发者定义“横切关注点”,如日志、事务管理等,这些关注点可以独立于业务代码进行,提高代码...

    Xml配置实现AOP

    通过研究这些示例,你可以更好地理解和应用这两种AOP实现方式。 总结来说,XML配置在Spring AOP中扮演着核心角色,它允许我们精细控制切面的定义、通知的执行时机以及代理的生成方式。无论是基于代理还是自动代理,...

    Spring实现AOP的4种方式

    本篇文章将详细探讨Spring实现AOP的四种主要方法:基于代理的方式、基于AspectJ的注解方式、基于XML的AOP配置以及基于Java的AOP配置。 1. 基于代理的实现 Spring的AOP支持两种代理类型:JDK动态代理和CGLIB代理。...

    Spring 使用AspectJ 实现 AOP(基于xml文件、基于注解)

    本教程将探讨如何在Spring中结合AspectJ实现AOP,包括基于XML配置和基于注解的方式。 **一、AOP基本概念** AOP的核心概念有切面(Aspect)、连接点(Join Point)、通知(Advice)、切点(Pointcut)和引入...

    springAop的配置实现

    Spring AOP通过XML配置文件提供了灵活的方式来定义和管理切面、切入点和通知,使得我们可以轻松地在应用程序中实现横切关注点的解耦。了解和掌握Spring AOP的配置实现,有助于提升我们构建松散耦合、易于维护的系统...

    spring famework 基于xml配置aop示例

    在Spring中,切面可以通过两种方式实现:XML配置或注解。 接下来,我们进入XML配置部分。在Spring的配置文件(如`applicationContext.xml`)中,你需要定义一个`&lt;aop:config&gt;`标签来开启AOP支持。例如: ```xml ...

    Xml文件配置实现AOP通知

    通过Spring的XML配置,我们可以灵活地定义和实现AOP通知,包括前置、后置、返回后、异常后以及环绕通知。这使得我们可以将横切关注点与业务逻辑分离,提高代码的可维护性和复用性。Spring的AOP功能强大且易于使用,...

    spring aop xml实现

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

    spring aop xml 实例

    Spring AOP主要通过两种方式实现:XML配置和注解。本实例主要探讨的是使用XML配置的方式来实现AOP。XML配置虽然相比注解方式略显繁琐,但它提供了更大的灵活性,尤其是在需要对多个类或方法应用相同通知(Advice)时...

    spring_aop xml方式实现aop

    XML配置是Spring AOP早期常用的一种配置方式,虽然在Spring 4.3之后推荐使用注解式AOP,但理解XML配置对于深入学习AOP仍然很有帮助。下面我们将详细讨论如何通过XML配置实现Spring AOP。 首先,我们需要在Spring...

    spring基于AOP实现事务

    总结一下,Spring基于AOP实现的事务管理通过TransactionProxyFactoryBean,结合声明式事务配置,能够提供一种高效且易于维护的事务解决方案。它允许我们在不修改业务逻辑的情况下,统一管理和控制事务,提升了代码的...

    AOP的相关概念,基于XML的AOP的配置,基于注解的AOP配置

    #### AOP的实现方式 1. **基于XML的配置**:通过在Spring的配置文件中使用特定的元素来定义切面、切入点和通知。 2. **基于注解的配置**:通过使用注解来标注需要增强的类或方法,并定义切面的行为。 ### 基于XML...

Global site tag (gtag.js) - Google Analytics