- 浏览: 348075 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
pacoson:
感谢楼主。请受小生一拜。
ANT预编译JSP -
zhuhongming123:
一楼的同学Lucene4.* 以上的 已经改成了Numeric ...
Lucene日期排序及组合查询 -
ywjk520:
RangeQuery在哪个包里?
Lucene日期排序及组合查询 -
willwen:
有个疑问,楼主,为何初始化bits 从txt读取已有的网址是直 ...
布隆过滤器(Bloom Filter)之java实例 -
yu_226528:
还不如没有呢
jFreeChart 在jsp页上实现简单的折线图、柱状图
Spring默认使用JDK动态代理来实现AOP,如果业务对象没有实现接口,默认使用CGLIB代理,面向接口编程是一个良好得习惯,尽量不要面向具体类
首先,有个Dog接口
package AOP.SimapleAOP; public interface Dog ...{ public void info(); public void run(); }
然后给出这个接口的实现类:
package AOP.SimapleAOP; public class DogImpl implements Dog ...{ public void info() ...{ System.out.println("我是一只猎狗"); } public void run() ...{ System.out.println("我奔跑迅速"); } }
DogFactory:
package AOP.SimapleAOP; public class DogFactory ...{ private static DogFactory df; private Dog gundog; private DogFactory()...{ } public static DogFactory instantce()...{ if(df==null)...{ df=new DogFactory(); } return df; } public Dog getDog(String dogName)...{ if(dogName.equals("gundog"))...{ if(gundog==null)...{ return new DogImpl(); } return gundog; } return null; } }
下面是一个通用类:没有和任何特定的类耦合
package AOP.SimapleAOP; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class ProxyHandler implements InvocationHandler ...{ private Object targetObject; public void setTargetObject(Object targetObject) ...{ this.targetObject = targetObject; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable ...{ Object result=null; if(method.getName().equals("info"))...{ System.out.println("begin"); result=method.invoke(targetObject, args); System.out.println("end"); } else...{ result=method.invoke(targetObject, args); } return null; } }
上述代码通过mehtod对象的invoke方法,可以完成目标对象得方法可调用,目标是Object类型,可以使任何业务实现类,在目标对象的info方法中,进行了功能增强(多打印了begin和end)
代理工厂:
package AOP.SimapleAOP; import java.lang.reflect.Proxy; public class MyProxyFacytory ...{ public static Object getProxy(Object object)...{ ProxyHandler handler=new ProxyHandler(); handler.setTargetObject(object); //第一参数用来创建动态代理的ClassLoader对象,只能该对象能访问dog接口即可 //第二个参数是接口数组 //第三个参数是代理包含的处理实例 return Proxy.newProxyInstance(DogImpl.class.getClassLoader(), object.getClass().getInterfaces(), handler); } }
Dynamic Proxy要求被代理的必须是接口的实现类,都则无法为其构造相应的动态类,所以Spring对接口全部采用Dynamic Proxy 实现AOP,对没有实现接口的类采用CGLIB
测试代码:
package AOP.SimapleAOP; public class Test ...{ public static void main(String[] args) ...{ Dog dog=null; Dog targetObject=DogFactory.instantce().getDog("gundog"); Object proxy=MyProxyFacytory.getProxy(targetObject); if(proxy instanceof Dog)...{ dog=(Dog)proxy; } dog.info(); dog.run(); } }
结果:
begin
我是一只猎狗
end
我奔跑迅速
发表评论
-
在Struts中基于Spring的AOP MethodInterceptor(拦截器)的权限验证
2010-08-13 13:34 1701本程序是关于"某考试系统"中的aop应用. ... -
反射实现 AOP 动态代理模式(2)
2010-08-05 12:40 936上面类中出现的Logger类和Level枚举还是和上一上例子的 ... -
反射实现 AOP 动态代理模式(1)
2010-08-05 12:37 905其实AOP的意思就是面向切面编程.OO注重的是我们解决问题的方 ... -
Spring事务配置的五种方式
2010-06-25 16:51 776前段时间对Spring的事务配置做了比较深入的研究,在此之间对 ... -
使用 Spring 2.5 注释驱动的 IoC 功能(2)
2010-06-25 16:37 896使用 JSR-250 的注释 Sprin ... -
使用 Spring 2.5 注释驱动的 IoC 功能(1)
2010-06-25 16:36 735概述 注释配置相对于 XML 配置具有很多的优势: 它可以 ... -
spring事务配置方法(BeanNameAutoProxyCreator)
2010-05-11 15:18 1056采用这种配置策略,完全可以避免增量式配置,所有的事务代理由系统 ... -
spring事务配置方法(TransactionProxyFactoryBean)
2010-05-11 15:10 1082采用这种方式的配置时候,配置文件的增加非常快,每个bean有需 ... -
spring事务配置方法(TransactionProxyFactoryBean继承)
2010-05-11 15:07 1124大部分情况下,每个事务代理的事务属性大同小异,事务代理的实现类 ... -
spring事务配置方法(BeanNameAutoProxyCreator)
2010-05-11 15:05 1135采用这种配置策略,完全可以避免增量式配置,所有的事务代理由系统 ... -
spring声明式事务
2010-05-11 14:26 839Spring中几种常见的事务配置,是Aop和Ioc的充分体现以 ... -
Spring AOP 入门实例
2010-05-01 19:18 854AOP 面向切面,可以让我们在不修改业务代码的前提下,在业务代 ... -
Sping acegi 配置文件
2010-05-01 18:23 966applicationContext-acegi-securi ... -
Spring的BeanFactory
2010-05-01 18:17 783一、Spring装配Bean的过程 1. 实例化; 2. 设置 ... -
使用Spring方法注入协调不同步的bean
2010-05-01 18:00 1235<?xml version="1.0" ... -
几种加载Spring的配置文件的方式
2010-05-01 16:49 1290package com.liu.test; pu ... -
Quartz在Spring中动态设置cronExpression
2009-11-20 15:26 1242什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什 ... -
使用Spring发邮件
2009-11-07 14:15 994关于Spring的邮件发送的功能演示: (我把程序中一些敏感 ... -
Spring中的Quartz配置
2009-11-07 10:16 912Quartz是一个强大的企业级任务调度框架,Spring中继承 ... -
Spring ~IOC Annotations
2009-10-29 18:49 10421.1 零配置使用场合 IOC Annotations ...
相关推荐
在本文中,我们将通过一个简单的例子来展示如何使用Java动态代理实现AOP。首先,我们定义了一个business接口和一个实现类BusinessObject,BusinessObject中包含了商业逻辑代码和日志记录代码。 ```java public ...
在Spring中,AOP主要通过两种动态代理技术实现:JDK动态代理和CGLIB动态代理。 首先,让我们详细了解一下JDK动态代理。JDK动态代理基于Java的接口实现,它适用于目标对象实现了至少一个接口的情况。在运行时,JDK...
在这个例子中,我们将探讨如何使用动态代理来实现一个简单的Spring AOP功能。 动态代理是Java提供的一种机制,它允许我们在运行时创建对象的代理,该对象可以代表原对象执行额外的操作。在Spring AOP中,有两种主要...
以下是一个简单的例子,展示了如何使用Java动态代理实现AOP: ```java import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; interface MyInterface {...
以下是一个简单的动态代理实现示例: ```java public class DynamicProxy implements InvocationHandler { private Object target; public DynamicProxy(Object target) { this.target = target; } @...
### 动态代理实现AOP #### 概述 面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,旨在通过将横切关注点与业务逻辑分离来提高系统的模块化程度。本篇文章主要介绍了如何利用Java动态代理技术...
- 虽然Java动态代理能实现简单的AOP功能,但它有一些限制。例如,它只能代理实现了接口的类,而不能代理没有接口或实现了多个接口的类。Spring AOP通过CGLIB库解决了这个问题,可以代理任何类。 - Spring AOP提供...
下面是一个简单的Java动态代理实现AOP的例子,模拟日志记录功能: ```java public interface MyInterface { void doSomething(); } public class MyTarget implements MyInterface { @Override public void ...
在Java中,我们可以使用JDK的动态代理或者Spring AOP来实现代理模式。 JDK动态代理主要依赖于`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。Proxy类是生成代理对象的工厂,而...
在这个"动态代理(AOP)简单例子"中,可能会展示如何使用JDK或CGLIB创建代理对象,以及如何使用匿名类实现InvocationHandler接口。同时,通过对比直接调用和动态调用,可以更直观地理解动态代理带来的优势。这个例子...
从文件内容可以看出,文档主要讨论了如何使用Java动态代理来实现AOP的基本原理。文档中提供了一个简单的例子,其中定义了一个业务接口BusinessInterface和一个实现了该接口的BusinessObject类。BusinessObject类中的...
综上所述,通过动态代理实现AOP可以极大地简化项目中的代码维护,提高开发效率,同时也为开发者提供了一种灵活处理横切关注点的方式。对于需要进行业务逻辑增强的项目,这是一种值得推荐的设计模式。
在IT领域,动态代理和AOP(面向切面编程)是两种重要的编程概念,它们能够帮助我们实现代码的解耦和模块化。本篇将详细探讨JDK动态代理和Spring AOP,以及它们在实际应用中的作用。 首先,JDK动态代理是Java提供的...
本项目旨在通过Java的动态代理技术实现面向切面编程(AOP),涵盖了静态代理、JDK动态代理、CGLIB动态代理、AspectJ以及基于instrumentation的动态代理等多种实现方式。通过这些实现方式,可以在不修改原有代码的...
Java 动态代理技术是Java平台提供的一种强大的编程机制,它允许我们在运行时创建具有特定接口的代理对象,这些代理对象可以对方法调用进行拦截和处理,这正是AOP(面向切面编程)的核心思想。在Java中,动态代理主要...