`

动态代理实现AOP思想

阅读更多



 用户业务接口:

package biz;

public interface UserBiz {

	public void add();

}

 

用户业务接口实现类:

package biz;

import annotation.Before;

public class UserBizImpl implements UserBiz {

	@Before(name="记录日志方法")
	public void log(){
		System.out.println("UserBizImpl.log()");
	}
	
	
	public void add(){
		System.out.println("UserBizImpl.add()");
	}
}

 业务方法执行前注解:

package annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Before {
	
	public String name() default "";
}

 代理工厂类:

 

package proxy;

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

import annotation.Before;

public class ProxyFactory implements InvocationHandler{
	
	private Object target;
	
	public Object getProxy(Object target) {
		this.target = target;
		Object proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(),
				target.getClass().getInterfaces(), this);
		return proxy;
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		
			Object obj = null;
			System.out.println("方法前的处理");
			parseBeforeMethod();
			try {
				obj = method.invoke(target, args);
				System.out.println("方法后的处理");
			} catch (Exception e) {
				System.out.println("方法异常处理");
				e.printStackTrace();
			}finally{
				System.out.println("方法的最终处理");
			}
		
		return obj;
	}
	
	private void parseBeforeMethod(){
		Class<?> clazz = target.getClass();
		for(Method method : clazz.getDeclaredMethods()){
			Before before = method.getAnnotation(Before.class);
			if(before != null){
				try {
					method.invoke(target);
					return;
				} catch (Exception e) {
					e.printStackTrace();
				} 
			}
		}
		
	}
}

 

客户端代码:

package client;

import proxy.ProxyFactory;
import biz.UserBiz;
import biz.UserBizImpl;

public class Client {

	public static void main(String[] args) {
		
		UserBiz userBiz = (UserBiz) new ProxyFactory().getProxy(new UserBizImpl());
		
		userBiz.add();
		
	}

}

 

0
0
分享到:
评论

相关推荐

    aop思想的java实现

    aop思想的java代码实现。代码分三个部分,一个是不使用aop思想实现日志记录,一个是使用静态代理实现aop,最后是使用java 1.3之后的动态代理机制实现。

    aop思想的java代码实现

    这是一个aop思想的实现。配合本博客文章《aop》。其中有3个包,一个没有实现aop,一个用静态代理实现aop,一个使用java的动态代理机制实现aop。

    AOP技术及其在J2EE中动态代理实现

    术解决在软件开发中OOP难以解决的问题以及提高开发效率,利用JAVA的反射机制,研究了AOP的动态代理实现原 理,说明了其可行性,体现了AOP技术应用价值和发展前景。 关键词:AOP;动态代理;横切关注点

    使用代理实现简易的spring aop功能

    这个例子的功能是使用动态代理的思想实现一个spring简易的bean工厂和aop。

    Java动态代理在AOP中的应用

    本文首先介绍了AOP 的基本思想,然后针对它在JAVA 语言 中的实现,具体介绍了JAVA 的动态代理来怎样实现一个简单的AOP 容器

    java 实现AOP

     为了简单起见,例子没有没有使用任何第三方的AOP Framework, 而是利用Java语言本身自带的动态代理功能来实现AOP.  让我们先回到AOP本身,AOP主要应用于日志记录,性能统计,安全控制,事务处理等方面。它的主要...

    Spring Aop实现共享单车按小时计费

    用SpringAop思想写共享单车按小时计费,用代理类来实现计费

    利用Java的反射与代理实现IOC模式

    利用Java的反射与代理实现IOC模式 在Java中,其反射和动态代理机制极其强大,我们可以通过其反 射机制在运行时获取信息。而代理是一种基本的设计模式,它是一种为了提供额外的或不同的操作而插入到真 实对象中的...

    Java 动态代理.md

    动态代理在 Java 中有着广泛的应用,比如 AOP 的实现原理、RPC远程调用、Java 注解对象获取、日志框架、全局性异常处理、事务处理等。 在了解动态代理前,我们需要先了解一下什么是代理模式。 代理模式 代理模式...

    spring-aop.zip

    Spring以JVM的动态代理技术为基础,设计出了一系列的AOP横切实现,比如前置通知、返回通知、异常通知等。同时,Pointcut接口可以匹配切入点,可以使用现有的切入点来设计横切面,也可以扩展相关方法根据需求进行切入...

    Api万能路由利用AOP编程思想,指针参数,等来实现任意object-c的API调用

    1、资源内容: Api万能路由利用AOP编程思想,指针参数,等来实现任意object-c的API调用。 支持基本数据类型,对象类型,代理,block,枚举,结构体等(系统自带和自定义均支持) ;本sdk用于组件化开发模式,多sdk...

    进击的编程思想!带你学Spring AOP核心编程思想教程 新角度学面向切面编程

    Spring AOP 使用纯 Java 实现,不需要专门的编译过程和类加载器,在运行期间通过代理方式向目标类植入增强的代码。 课程内容非常详细的介绍Spring AOP全栈技术点,开篇帮助同学们进行知识储备,夯实基础就是核心!...

    AOPDemo:AOP切面demo

    它和我们平时接触到的OOP都是编程的不同思想,OOP,即『面向对象编程』,它提倡的是将功能模块化,对象化,而AOP的思想,则不太一样,它提倡的是针对同一类问题的统一处理,通过预编译方式和运行期动态代理实现程序...

    Java动态代理简单应用

    概念  代理模式是基本的设计模式之一,它是开发者为了提供额外的或...  Java动态代理实现机制采用了反射的思想,有关于反射的基础知识,可以参见博客Java发射机制浅析。  原理  Spring核心AOP实现技术之一是采用

    java动态代理

    简单的实现了java的代理和通过CGLIB实现AOP的浅析,掌握java的AOP编程思想

    Java的动态代理机制详解

    我们知道Spring主要有两大思想,一个是IoC,另一个是AOP,对于IoC,依赖注入不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能,我们更需要学习的是其底层是怎么样的一个原理,...

    Spring learning

    学习spring的一个小例子,主要实现代理和AOP思想

    Spring框架研究与探讨

    本文对Spring框架中所包含的AOP思想以及事务管理进行了分析,并通过对一个业务对象实现加锁/解锁的操作,说明 了动态代理模式的可行性与有效性。 Aspect Oriented Programming(AOP)是近年来计算机技术中比较...

    拦截器机制及其实现原理

    拦截器是Struts2框架的核心...掌握Java中提供的动态代理方式实现拦截 了解拦截在开发中的意义 掌握Struts2框架的拦截机制和实现原理 掌握在Struts2应用中如何定义、配置及使用拦截器和拦截器栈 掌握拦截器的方法过滤

Global site tag (gtag.js) - Google Analytics