Java实现aop案例

标签: java aop | 发表时间:2014-04-27 11:33 | 作者:shihuan830619
出处:http://www.iteye.com
MyPersonService.java代码如下:
package com.shihuan.jdkaop.service;

public interface MyPersonService {
	
	public void findPerson(String name);
	
}


MyPersonServiceImpl.java代码如下:
package com.shihuan.jdkaop.service.impl;

import com.shihuan.jdkaop.service.MyPersonService;

public class MyPersonServiceImpl implements MyPersonService {

	public String myproperty = "shihuan...";
	
	@Override
	public void findPerson(String name) {
		System.out.println("在com.shihuan.jdkaop.service.impl.MyPersonServiceImpl.findPerson()中: " + name);
	}

}


SecurityHandler.java代码如下:
package com.shihuan.jdkaop.handler;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import com.shihuan.jdkaop.service.MyPersonService;
import com.shihuan.jdkaop.service.impl.MyPersonServiceImpl;

public class SecurityHandler implements InvocationHandler {

	private Object targetObject;
	
	public Object createProxyInstance(Object targetObject){
		this.targetObject = targetObject;
		
		//创建一个代理对象,此对象是一个与目标对象实现了相同接口的对象,第一个参数为目标对象的类加载器,第二个参数为目标对象所实现的所有接口,第三个参数为实现了InvocationHandler接口的对象实例,这里是SecurityHandler本身
		return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(), this.targetObject.getClass().getInterfaces(), this);
	}
	
	/**
	 * InvocationHandler接口的方法
	 * @param proxy 代理对象
	 * @param method 被拦截到的方法
	 * @param args 被拦截到的方法的输入参数
	 * @return 代理对象最后又将拦截到的方法处理委派回给目标对象自己处理
	 */
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {

		MyPersonServiceImpl bean = (MyPersonServiceImpl) this.targetObject;
		
		Object result = null;
		
		System.out.println("before advice()");
		result = method.invoke(bean, args);
		System.out.println("after advice()");
		System.out.println("参数个数: " + args.length);
		for (int i = 0; i < args.length; i++) {
			System.out.println("每一个具体的参数值: " + args[i]);
		}
		System.out.println(bean.myproperty);
		
		return result;
	}

}


TestMyAop.java代码如下:
package com.shihuan.jdkaop.test;

import com.shihuan.jdkaop.handler.SecurityHandler;
import com.shihuan.jdkaop.service.MyPersonService;
import com.shihuan.jdkaop.service.impl.MyPersonServiceImpl;

public class TestMyAop {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		SecurityHandler myhandler = new SecurityHandler();
		
		MyPersonService mybz = (MyPersonService) myhandler.createProxyInstance(new MyPersonServiceImpl());
		
		mybz.findPerson("yushibo");
	}

}




已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [java aop] 推荐:

Java实现aop案例

- - 行业应用 - ITeye博客
MyPersonService.java代码如下:. MyPersonServiceImpl.java代码如下:. System.out.println("在com.shihuan.jdkaop.service.impl.MyPersonServiceImpl.findPerson()中: " + name);.

使用AOP与注解记录Java日志

- - ImportNew
有些时候,我想要把每个运行过的方法接收到的参数、返回值和执行时间等信息记录(通过slf4j 和 log4j)下来. 在AspectJ、jcabi-aspects和Java注解的帮助下我实现了这个想法. 在log4j中可以看到以下输出:. 接下来我们来看看它是如何工作的. 注解是Java 6中采用的一种技术( 译注:其实Java 5就有注解了).

Java Spring注解任务调度并实现AOP监控任务执行情况

- - 极客521 | 极客521
本文讲的是通过Spring注解的方式实现任务调度. 只要引入了spring-context包就能够在项目中使用注解方式的任务调度. 需要在Spring配置文件中加入task的schema. 然后在代码中就可以直接用了,要定时执行的方法必须是void的,并且没有任何参数的. cron表达式请自行问百度,下面只列出几个从网上找的例子.

AOP详解

- - CSDN博客推荐文章
AOP(面向方面编程:Aspect Oriented Programing)和IoC一样是Spring容器的内核,声明式事务的功能在此基础上开花结果. 但是AOP和OOP差别较大,要很好地理解这个概念,做到心领神会还是不容易的,不过相信看完帖子,你就不再迷惑了. 编程语言最终极的目标就是能以更自然、更灵活的方式模拟世界,从原始机器语言到过程语言再到面向对象的语言,编程语言一步步地用更自然、更灵活的方式描述软件.

Spring AOP详解

- - Java - 编程语言 - ITeye博客
        最近项目中遇到了以下几点需求,仔细思考之后,觉得采用AOP来解决. 一方面是为了以更加灵活的方式来解决问题,另一方面是借此机会深入学习Spring AOP相关的内容. 例如,以下需求不用AOP肯定也能解决,至于是否牵强附会,仁者见仁智者见智. 1.对部分函数的调用进行日志记录,用于观察特定问题在运行过程中的函数调用情况.

AOP的实现机制

- 风子 - ITeye论坛最新讨论
    附件中有本文的源代码和Pdf版. 本文写的很长的原因,是不希望大家学习AOP时到处找资料,大家有时间可以按照本文动手实践下,相信会有非常大的收获的,有什么问题互相交流,有问必答. AOP就是面向切面编程,我们可以从几个层面来实现AOP. 在编译器修改源代码,在运行期字节码加载前修改字节码或字节码加载后动态创建代理类的字节码,以下是各种实现机制的比较.

Spring AOP监控SQL执行

- - CSDN博客架构设计推荐文章
         对数据库连接池Proxool比较熟悉的读者,都知道Proxool可以记录SQL执行内容和时间等信息日志. 我们可以将该日志记录专门的SQL日志文件,对于查找执行特别耗时的SQL起了不小的作用. 对于一些其他连接池,没有该特性时,本文介绍Spring AOP切面方法来记录SQL日志.

springboot aop日志记录

- - 编程语言 - ITeye博客
一、POM增加AOP JAR包. 三、SysAspect类. 注:@annotation(cn.com.hfai.controller.system.Logweb) 一定要指定Logweb类. 四、在Controller类的方法之上加上注解 @Logweb 即可. 注:这个只是打印在控制台上,若想放到数据库中,则需要增加操作数据库的业务代码.

Spring AOP 实现原理与 CGLIB 应用

- - 博客 - 伯乐在线
来源: IBM Developerworks. 简介: AOP(Aspect Orient Programming),也就是面向方面编程,作为面向对象编程的一种补充,专门用于处理系统中分布于各个模块(不同方法)中的交叉关注点的问题,在 Java EE 应用中,常常通过 AOP 来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等.

aop在接口测试中的应用

- - Taobao QA Team
最近在接口测试过程中两次应用了aop,第一次解决了更改大量脚本之苦,第二次解决了增加重复代码之痛. 一、通过aop转换图片与分类id. 多媒体平台上线后,图片空间要将数据迁移到平台统一管理. 迁移开发要做两件事,首先是做接口兼容,就是原来调用图片空间的实现,走旧数据库,改成调用媒体平台的实现,走新数据库.