`
benx
  • 浏览: 276265 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring AOP 之 HelloWorld

    博客分类:
  • java
阅读更多


java代码
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AopTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("benx.xml");
		HelloWorld helloWorld = (HelloWorld) ctx.getBean("helloWorld");
		helloWorld.sayHelloWorld();
	}

}

interface HelloWorld {
	void sayHelloWorld();
}

interface HelloChina {
	void sayHelloChina();
}

class HelloWorldImpl implements HelloWorld {

	public void sayHelloWorld() {
		System.out.println("Hello World!");
		//制造异常
		String str = null;
		str.substring(1);

	}
}

/**
 * 日志拦截器
 * 
 * @author jin.xiong
 * 
 */
class LogAdvice {

	/**
	 * 执行方法前拦截器
	 * 
	 * @param joinPoint
	 */
	public void methodBefore(JoinPoint joinPoint) {
		System.out.println(joinPoint.getTarget().getClass().getName() + "."
				+ joinPoint.getSignature().getName() + " Start");
	}

	/**
	 * 方法执行后拦截器
	 * 
	 * @param joinPoint
	 */
	public void methodAfter(JoinPoint joinPoint) {
		System.out.println(joinPoint.getTarget().getClass().getName() + "."
				+ joinPoint.getSignature().getName() + " end");
	}

	/**
	 * 方法出现异常拦截器
	 * 
	 * @param joinPoint
	 */
	public void methodException(JoinPoint joinPoint) {
		System.out.println(joinPoint.getTarget().getClass().getName() + "."
				+ joinPoint.getSignature().getName() + " mett Error");
	}

	/**
	 * 方法环绕拦截器,如果使用了这个,可以忽视上面的方法
	 * 注意该方法参数为ProceedingJoinPoint ,这是可以执行的,只有round可以使用
	 * @param joinPoint
	 * @return
	 */
	public Object methodRound(ProceedingJoinPoint joinPoint) {

		methodBefore(joinPoint);
		Object ob = null;
		try {
			ob = joinPoint.proceed();
		} catch (Throwable error) {
			methodException(joinPoint);
		}
		methodAfter(joinPoint);
		return ob;
	}

}
 
benx.xml
<?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"
	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">
            
            
	<bean id="helloWorld" class="HelloWorldImpl"/>
	
	<bean id="logAdvice" class="LogAdvice"/>
	
	<aop:config>
		<aop:aspect ref="logAdvice">
			<aop:pointcut id="logPointcut" expression="execution(* *.*(..))" />
			<aop:before method="methodBefore" pointcut-ref="logPointcut" />
			<aop:after method="methodAfter" pointcut-ref="logPointcut" />
			<aop:after-throwing method="methodException" pointcut-ref="logPointcut" />
			
			<!-- aroun最好不要和他们同时使用 -->
			<aop:around method="methodRound" pointcut-ref="logPointcut" />
		</aop:aspect>
	</aop:config>
</beans>
 


打印结果,之所以会重复,使用为使用了round,可以把benx.xml中的methodRound去掉
HelloWorldImpl.sayHelloWorld Start
HelloWorldImpl.sayHelloWorld Start
Hello World!
HelloWorldImpl.sayHelloWorld end
HelloWorldImpl.sayHelloWorld mett Error
HelloWorldImpl.sayHelloWorld mett Error
HelloWorldImpl.sayHelloWorld end
 
分享到:
评论

相关推荐

    Spring的AOP示例DEMO HELLOWORLD

    本示例DEMO "Spring的AOP示例DEMO HELLOWORLD" 将引导我们深入理解Spring AOP的核心概念,并通过一个简单的 HelloWorld 示例来展示其实现过程。 首先,面向切面编程(AOP)是一种编程范式,旨在提高代码的可维护性...

    Spring4 HelloWorld

    Spring框架是Java开发中广泛使用的轻量级框架,它以其依赖...学习和理解"Spring4 HelloWorld",不仅能够帮助初学者掌握Spring的基本用法,也为进一步深入学习Spring的其他高级特性,如AOP、MVC、JPA等打下坚实基础。

    spring笔记之helloworld所需要的jar包

    本篇文章将详细讲解在创建一个简单的Spring HelloWorld应用时,需要导入的jar包以及它们在Spring框架中的作用。 首先,我们需要理解Spring的核心组件,即Spring IoC(Inversion of Control)容器。IoC容器是Spring...

    利用Spring输出HelloWorld

    本文将深入探讨如何利用Spring框架输出“HelloWorld”,并介绍相关的基础知识。 首先,Spring是一个开源的Java平台,它为创建复杂的、模块化的、松耦合的Java应用程序提供了强大的支持。它的核心特性包括依赖注入...

    Eclipse下Spring示例HelloWorld程序

    在Eclipse这个强大的Java集成开发环境中,创建一个Spring框架的HelloWorld程序是学习Spring入门的典型步骤。这个程序展示了如何在Eclipse中配置Spring环境,编写简单的Bean定义,并通过Spring的IoC(Inversion of ...

    Spring之HelloWorld

    本篇文章将深入探讨“Spring之HelloWorld”,通过一个简单的示例介绍如何使用Spring框架构建应用程序。首先,我们来看一下Spring的核心概念。 Spring是一个开源的Java平台,它为构建基于Java的企业级应用提供了全面...

    使用Spring3.0框架开发Hello World例子

    接下来,我们使用Spring的XML配置文件来定义`HelloWorld`类的bean。在`Spring3`压缩包中的`applicationContext.xml`文件可以这样编写: ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns...

    spring-mvc helloworld demo

    在本"spring-mvc helloworld demo"中,我们可以看到如何设置一个基本的 Spring MVC 项目,以便初学者了解其工作原理和配置步骤。 首先,我们需要理解 MVC 模式的概念。MVC 分为三个主要部分:模型(Model)、视图...

    Spring aop.docx

    3. **编写Controller代码**:创建一个简单的RESTful API,例如一个返回"Hello, World!"的GET方法。 4. **编写@Aspect代码**:创建一个带有`@Aspect`注解的类,定义切入点表达式(例如匹配所有Controller方法),并...

    Spring的Hello World:理解AOP

    标题中的“Spring的Hello World:理解AOP”指的是在Spring框架中使用面向切面编程(Aspect-Oriented Programming,简称AOP)进行程序开发的基本概念和实践。面向切面编程是一种编程范式,旨在提高代码的可重用性和...

    spring helloworld 例子

    本示例“spring helloworld”将引导初学者入门Spring框架,通过一个简单的实例来理解其核心概念。 首先,我们需要了解Spring的基本架构。Spring是一个开放源代码的Java平台,它提供了全面的编程和配置模型,主要...

    Spring AOP中文教程

    System.out.println("Hello world! (by " + this.getClass().getName() + ")"); } } ``` ##### 2. Pointcut(切点) - **定义**:Pointcut定义了Advice被应用的地方,即哪些方法或哪些类的方法将被拦截。它是...

    Spring第一个HelloWorld

    总的来说,"Spring第一个HelloWorld"是一个很好的起点,它可以帮助开发者建立对Spring框架的基本认识,为后续学习Spring的AOP(面向切面编程)、事务管理、数据访问、MVC等高级特性打下坚实的基础。

    spring MVC Helloworld

    **Spring MVC HelloWorld 实例详解** 在Java Web开发中,Spring MVC框架被广泛使用,它为构建基于模型-视图-控制器(MVC)模式的Web应用程序提供了强大的支持。本篇文章将详细讲解如何在MyEclipse2013环境中创建一...

    spring+mybatis的helloworld项目

    在本项目"spring+mybatis的helloworld"中,我们主要关注的是如何使用Spring和MyBatis这两个流行的Java开发框架来构建一个简单的Web应用程序。这个项目以Maven为构建工具,实现了MySQL数据库的插入操作,并利用Log4j...

    spring4.0入门案例-helloworld

    在这个"spring4.0入门案例-helloworld"中,我们将学习如何搭建一个基本的Spring环境,并实现一个简单的"Hello, World!"应用。 首先,我们需要理解Spring的核心概念:依赖注入(Dependency Injection,简称DI)。在...

    Spring AOP编程

    当我们配置Spring AOP在调用`theMethod`之前执行`TestBeforeAdvice`的`before`方法,那么每次调用`theMethod`时,都会先打印出"Hello world!"。 ```java public class BeanImpl implements Bean { public void the...

    springMVC+spring+dubbo hello world测试项目

    在这个"springMVC+spring+dubbo hello world测试项目"中,我们可以期待看到以下主要目录和文件: 1. `src/main/java`:包含项目的源代码,可能有如com.example.demo包,下设Service、Controller和配置类等。 2. `...

Global site tag (gtag.js) - Google Analytics