用户业务接口:
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();
}
}
分享到:
相关推荐
aop思想的java代码实现。代码分三个部分,一个是不使用aop思想实现日志记录,一个是使用静态代理实现aop,最后是使用java 1.3之后的动态代理机制实现。
这是一个aop思想的实现。配合本博客文章《aop》。其中有3个包,一个没有实现aop,一个用静态代理实现aop,一个使用java的动态代理机制实现aop。
术解决在软件开发中OOP难以解决的问题以及提高开发效率,利用JAVA的反射机制,研究了AOP的动态代理实现原 理,说明了其可行性,体现了AOP技术应用价值和发展前景。 关键词:AOP;动态代理;横切关注点
这个例子的功能是使用动态代理的思想实现一个spring简易的bean工厂和aop。
本文首先介绍了AOP 的基本思想,然后针对它在JAVA 语言 中的实现,具体介绍了JAVA 的动态代理来怎样实现一个简单的AOP 容器
为了简单起见,例子没有没有使用任何第三方的AOP Framework, 而是利用Java语言本身自带的动态代理功能来实现AOP. 让我们先回到AOP本身,AOP主要应用于日志记录,性能统计,安全控制,事务处理等方面。它的主要...
用SpringAop思想写共享单车按小时计费,用代理类来实现计费
利用Java的反射与代理实现IOC模式 在Java中,其反射和动态代理机制极其强大,我们可以通过其反 射机制在运行时获取信息。而代理是一种基本的设计模式,它是一种为了提供额外的或不同的操作而插入到真 实对象中的...
动态代理在 Java 中有着广泛的应用,比如 AOP 的实现原理、RPC远程调用、Java 注解对象获取、日志框架、全局性异常处理、事务处理等。 在了解动态代理前,我们需要先了解一下什么是代理模式。 代理模式 代理模式...
Spring以JVM的动态代理技术为基础,设计出了一系列的AOP横切实现,比如前置通知、返回通知、异常通知等。同时,Pointcut接口可以匹配切入点,可以使用现有的切入点来设计横切面,也可以扩展相关方法根据需求进行切入...
1、资源内容: Api万能路由利用AOP编程思想,指针参数,等来实现任意object-c的API调用。 支持基本数据类型,对象类型,代理,block,枚举,结构体等(系统自带和自定义均支持) ;本sdk用于组件化开发模式,多sdk...
Spring AOP 使用纯 Java 实现,不需要专门的编译过程和类加载器,在运行期间通过代理方式向目标类植入增强的代码。 课程内容非常详细的介绍Spring AOP全栈技术点,开篇帮助同学们进行知识储备,夯实基础就是核心!...
它和我们平时接触到的OOP都是编程的不同思想,OOP,即『面向对象编程』,它提倡的是将功能模块化,对象化,而AOP的思想,则不太一样,它提倡的是针对同一类问题的统一处理,通过预编译方式和运行期动态代理实现程序...
概念 代理模式是基本的设计模式之一,它是开发者为了提供额外的或... Java动态代理实现机制采用了反射的思想,有关于反射的基础知识,可以参见博客Java发射机制浅析。 原理 Spring核心AOP实现技术之一是采用
简单的实现了java的代理和通过CGLIB实现AOP的浅析,掌握java的AOP编程思想
我们知道Spring主要有两大思想,一个是IoC,另一个是AOP,对于IoC,依赖注入不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能,我们更需要学习的是其底层是怎么样的一个原理,...
学习spring的一个小例子,主要实现代理和AOP思想
本文对Spring框架中所包含的AOP思想以及事务管理进行了分析,并通过对一个业务对象实现加锁/解锁的操作,说明 了动态代理模式的可行性与有效性。 Aspect Oriented Programming(AOP)是近年来计算机技术中比较...
拦截器是Struts2框架的核心...掌握Java中提供的动态代理方式实现拦截 了解拦截在开发中的意义 掌握Struts2框架的拦截机制和实现原理 掌握在Struts2应用中如何定义、配置及使用拦截器和拦截器栈 掌握拦截器的方法过滤