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
分享到:
相关推荐
本示例DEMO "Spring的AOP示例DEMO HELLOWORLD" 将引导我们深入理解Spring AOP的核心概念,并通过一个简单的 HelloWorld 示例来展示其实现过程。 首先,面向切面编程(AOP)是一种编程范式,旨在提高代码的可维护性...
Spring框架是Java开发中广泛使用的轻量级框架,它以其依赖...学习和理解"Spring4 HelloWorld",不仅能够帮助初学者掌握Spring的基本用法,也为进一步深入学习Spring的其他高级特性,如AOP、MVC、JPA等打下坚实基础。
本篇文章将详细讲解在创建一个简单的Spring HelloWorld应用时,需要导入的jar包以及它们在Spring框架中的作用。 首先,我们需要理解Spring的核心组件,即Spring IoC(Inversion of Control)容器。IoC容器是Spring...
本文将深入探讨如何利用Spring框架输出“HelloWorld”,并介绍相关的基础知识。 首先,Spring是一个开源的Java平台,它为创建复杂的、模块化的、松耦合的Java应用程序提供了强大的支持。它的核心特性包括依赖注入...
在Eclipse这个强大的Java集成开发环境中,创建一个Spring框架的HelloWorld程序是学习Spring入门的典型步骤。这个程序展示了如何在Eclipse中配置Spring环境,编写简单的Bean定义,并通过Spring的IoC(Inversion of ...
本篇文章将深入探讨“Spring之HelloWorld”,通过一个简单的示例介绍如何使用Spring框架构建应用程序。首先,我们来看一下Spring的核心概念。 Spring是一个开源的Java平台,它为构建基于Java的企业级应用提供了全面...
接下来,我们使用Spring的XML配置文件来定义`HelloWorld`类的bean。在`Spring3`压缩包中的`applicationContext.xml`文件可以这样编写: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns...
在本"spring-mvc helloworld demo"中,我们可以看到如何设置一个基本的 Spring MVC 项目,以便初学者了解其工作原理和配置步骤。 首先,我们需要理解 MVC 模式的概念。MVC 分为三个主要部分:模型(Model)、视图...
3. **编写Controller代码**:创建一个简单的RESTful API,例如一个返回"Hello, World!"的GET方法。 4. **编写@Aspect代码**:创建一个带有`@Aspect`注解的类,定义切入点表达式(例如匹配所有Controller方法),并...
标题中的“Spring的Hello World:理解AOP”指的是在Spring框架中使用面向切面编程(Aspect-Oriented Programming,简称AOP)进行程序开发的基本概念和实践。面向切面编程是一种编程范式,旨在提高代码的可重用性和...
本示例“spring helloworld”将引导初学者入门Spring框架,通过一个简单的实例来理解其核心概念。 首先,我们需要了解Spring的基本架构。Spring是一个开放源代码的Java平台,它提供了全面的编程和配置模型,主要...
System.out.println("Hello world! (by " + this.getClass().getName() + ")"); } } ``` ##### 2. Pointcut(切点) - **定义**:Pointcut定义了Advice被应用的地方,即哪些方法或哪些类的方法将被拦截。它是...
总的来说,"Spring第一个HelloWorld"是一个很好的起点,它可以帮助开发者建立对Spring框架的基本认识,为后续学习Spring的AOP(面向切面编程)、事务管理、数据访问、MVC等高级特性打下坚实的基础。
**Spring MVC HelloWorld 实例详解** 在Java Web开发中,Spring MVC框架被广泛使用,它为构建基于模型-视图-控制器(MVC)模式的Web应用程序提供了强大的支持。本篇文章将详细讲解如何在MyEclipse2013环境中创建一...
在本项目"spring+mybatis的helloworld"中,我们主要关注的是如何使用Spring和MyBatis这两个流行的Java开发框架来构建一个简单的Web应用程序。这个项目以Maven为构建工具,实现了MySQL数据库的插入操作,并利用Log4j...
在这个"spring4.0入门案例-helloworld"中,我们将学习如何搭建一个基本的Spring环境,并实现一个简单的"Hello, World!"应用。 首先,我们需要理解Spring的核心概念:依赖注入(Dependency Injection,简称DI)。在...
当我们配置Spring AOP在调用`theMethod`之前执行`TestBeforeAdvice`的`before`方法,那么每次调用`theMethod`时,都会先打印出"Hello world!"。 ```java public class BeanImpl implements Bean { public void the...
在这个"springMVC+spring+dubbo hello world测试项目"中,我们可以期待看到以下主要目录和文件: 1. `src/main/java`:包含项目的源代码,可能有如com.example.demo包,下设Service、Controller和配置类等。 2. `...