`

AOP之Hello World

    博客分类:
  • java
AOP 
阅读更多

 目标

package com.aop.joinpoint;

public class Greeting {

	public void greet() {
		System.out.print("World");
	}
	
	public String greetWithParam(String param) {
		System.out.println("Param is " + param);
		return param + ", nice to see you!";
	}

}

 

 环绕通知(又叫包围通知)

package com.aop.advice;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

public class AroundAdvice implements MethodInterceptor {

	@Override
	public Object invoke(MethodInvocation invocation) throws Throwable {
		System.out.print("Hello ");
		Object ret = invocation.proceed();
		System.out.println("!");
		return ret;
	}

}

 

前置通知

package com.aop.advice;

import java.lang.reflect.Method;

import org.springframework.aop.MethodBeforeAdvice;

public class BeforeAdvice implements MethodBeforeAdvice {

	@Override
	public void before(Method method, Object[] arg, Object target) throws Throwable {
		if (arg[0] == null) {
			throw new IllegalArgumentException("arg cannot be null.");
		}
		System.out.println("Before method:" + method.getName() + "(\"" + arg[0] + "\")");
	}

}

 

后置通知

package com.aop.advice;

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;

public class AfterAdvice implements AfterReturningAdvice {

	@Override
	public void afterReturning(Object returningValue, Method method, Object[] arg, Object target) throws Throwable {
		System.out.println("After method:" + method.getName() + "(\"" + arg[0] + "\")");
	}

}

 

手动创建代理

package com.aop.demo;

import org.springframework.aop.framework.ProxyFactory;

import com.aop.advice.AfterAdvice;
import com.aop.advice.AroundAdvice;
import com.aop.advice.BeforeAdvice;
import com.aop.joinpoint.Greeting;

public class GreetingDemo {

	public static void main(String[] args) {
		Greeting target = new Greeting();
		AroundAdvice aroundAdvice = new AroundAdvice();
		BeforeAdvice beforeAdvice = new BeforeAdvice();
		AfterAdvice afterAdvice = new AfterAdvice();

		ProxyFactory pf = new ProxyFactory();
		pf.addAdvice(aroundAdvice);
		pf.setTarget(target);

		Greeting proxy = (Greeting)pf.getProxy();

		//不使用代理
		target.greet();
		System.out.println();

		//使用代理(包围通用)
		proxy.greet();

		System.out.println();
		pf.removeAdvice(aroundAdvice);
		pf.addAdvice(beforeAdvice);
		proxy = (Greeting)pf.getProxy();

		//使用代理(前置通用)
		System.out.println(proxy.greetWithParam("Bruce"));

		System.out.println();
		pf.removeAdvice(beforeAdvice);
		pf.addAdvice(afterAdvice);
		proxy = (Greeting)pf.getProxy();

		//使用代理(后置通用)
		System.out.println(proxy.greetWithParam("David"));
	}

}

 

输出

/**Output:
World
Hello World!

Before method:greetWithParam("Bruce")
Param is Bruce
Bruce, nice to see you!

Param is David
After method:greetWithParam("David")
David, nice to see you!
*/

 

分享到:
评论

相关推荐

    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包

    HelloWorld helloWorld = (HelloWorld) context.getBean("helloWorld"); helloWorld.sayHello(); ``` 这就是Spring HelloWorld程序的基本构建过程,涉及到了Spring的核心组件和jar包。随着对Spring的深入学习,你会...

    利用Spring输出HelloWorld

    HelloWorld helloWorld = (HelloWorld) context.getBean("helloWorld"); System.out.println(helloWorld.sayHello()); ``` 通过上述步骤,我们成功地在Spring框架中输出了“HelloWorld”。这只是Spring框架冰山一角...

    SpringMVC入门很简单之HelloWorld

    在"SpringMVC入门很简单之HelloWorld"这个主题中,我们将探讨如何设置一个基本的SpringMVC项目并实现简单的"Hello, World!"展示。 首先,项目结构至关重要。在给定的文件名称列表中,我们看到了几个关键目录: 1. ...

    Spring之HelloWorld

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

    Java动态代理helloworld

    HelloWorld proxy = (HelloWorld) Proxy.newProxyInstance( HelloWorld.class.getClassLoader(), new Class[]{HelloWorld.class}, new LoggingInvocationHandler(target) ); proxy.sayHello(); // 输出 ...

    springmvc_helloWorld

    在这个名为"springmvc_helloWorld"的项目示例中,我们将探讨如何利用Spring MVC实现一个简单的表单请求与响应。该项目旨在帮助初学者理解Spring MVC的核心概念和工作流程。 1. **Spring MVC 框架介绍** Spring MVC...

    IDEA SpringMVC HelloWorld 实例

    对于初学者来说,使用 IDEA 创建一个简单的 SpringMVC HelloWorld 示例是一个很好的起点,能够快速熟悉这两个工具的使用。 首先,让我们了解 SpringMVC 的核心组件和工作流程: 1. **DispatcherServlet**:这是 ...

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

    HelloWorld helloWorld = (HelloWorld) context.getBean("helloWorld"); System.out.println(helloWorld.sayHello()); } } ``` 运行`MainApp`,你会看到"Hello World"被打印出来,这标志着你的Spring 3.0 "Hello...

    Eclipse下Spring示例HelloWorld程序

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

    Maven Hello world 程序 及 资源包

    在本资源包中,我们有两个主要的文件:`repository.rar`和`Spring3-hello-world-example.zip`。让我们逐一探讨它们所涉及的知识点。 首先,`repository.rar`通常包含的是Maven的本地仓库或者远程仓库中的依赖库。...

    spring helloworld 例子

    HelloWorld helloWorld = (HelloWorld) context.getBean("helloWorld"); helloWorld.sayHello(); ``` 在这里,`ClassPathXmlApplicationContext`是一个ApplicationContext的实现,它会加载指定路径(这里为`...

    HelloWorld.zip

    Spring框架是Java企业级应用开发中最广泛使用的框架之一,它提供了丰富的功能,包括依赖注入(DI)、面向切面编程(AOP)、事务管理、数据访问/对象关系映射(DAO/ORM)以及用于构建RESTful服务的Spring MVC。...

    Spring3MVC-REST-HelloWorld 实例简单代码

    Spring3MVC-REST-HelloWorld 是一个基础的示例,用于展示如何在Spring框架的MVC模块中实现RESTful Web服务。这个实例是初学者理解Spring MVC与REST结合使用的理想起点。REST(Representational State Transfer)是一...

    Spring的Hello World:理解AOP

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

    spring+mybatis的helloworld项目

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

    ssh_helloworld(初学参考)

    这个"ssh_helloworld"项目是专为初学者设计的,旨在帮助他们理解并掌握SSH框架的基本用法。 首先,Struts是MVC(模型-视图-控制器)架构的一个实现,主要用于处理Web应用的用户界面逻辑。它提供了动作类来处理HTTP...

    spring4.0入门案例-helloworld

    HelloWorld helloWorld = (HelloWorld) context.getBean("helloWorld"); helloWorld.printMessage(); } } ``` 在`main`方法中,我们创建了一个`ClassPathXmlApplicationContext`实例,传入了配置文件的路径。这...

    spring學習筆記——Helloworld

    在本篇“Spring学习笔记——HelloWorld”中,我们将探讨Spring框架的基础知识,以及如何创建一个简单的Spring应用程序。Spring是一个广泛使用的Java企业级应用开发框架,它提供了丰富的功能,包括依赖注入、AOP...

Global site tag (gtag.js) - Google Analytics