- 浏览: 337890 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 1658本程序是关于"某考试系统"中的aop应用. ... -
反射实现 AOP 动态代理模式(2)
2010-08-05 12:40 876上面类中出现的Logger类和Level枚举还是和上一上例子的 ... -
反射实现 AOP 动态代理模式(1)
2010-08-05 12:37 846其实AOP的意思就是面向切面编程.OO注重的是我们解决问题的方 ... -
Spring事务配置的五种方式
2010-06-25 16:51 703前段时间对Spring的事务配置做了比较深入的研究,在此之间对 ... -
使用 Spring 2.5 注释驱动的 IoC 功能(2)
2010-06-25 16:37 868使用 JSR-250 的注释 Sprin ... -
使用 Spring 2.5 注释驱动的 IoC 功能(1)
2010-06-25 16:36 678概述 注释配置相对于 XML 配置具有很多的优势: 它可以 ... -
spring事务配置方法(BeanNameAutoProxyCreator)
2010-05-11 15:18 1003采用这种配置策略,完全可以避免增量式配置,所有的事务代理由系统 ... -
spring事务配置方法(TransactionProxyFactoryBean)
2010-05-11 15:10 1050采用这种方式的配置时候,配置文件的增加非常快,每个bean有需 ... -
spring事务配置方法(TransactionProxyFactoryBean继承)
2010-05-11 15:07 1083大部分情况下,每个事务代理的事务属性大同小异,事务代理的实现类 ... -
spring事务配置方法(BeanNameAutoProxyCreator)
2010-05-11 15:05 1048采用这种配置策略,完全可以避免增量式配置,所有的事务代理由系统 ... -
spring声明式事务
2010-05-11 14:26 809Spring中几种常见的事务配置,是Aop和Ioc的充分体现以 ... -
Spring AOP 入门实例
2010-05-01 19:18 820AOP 面向切面,可以让我们在不修改业务代码的前提下,在业务代 ... -
Sping acegi 配置文件
2010-05-01 18:23 923applicationContext-acegi-securi ... -
Spring的BeanFactory
2010-05-01 18:17 741一、Spring装配Bean的过程 1. 实例化; 2. 设置 ... -
使用Spring方法注入协调不同步的bean
2010-05-01 18:00 1149<?xml version="1.0" ... -
几种加载Spring的配置文件的方式
2010-05-01 16:49 1247package com.liu.test; pu ... -
Quartz在Spring中动态设置cronExpression
2009-11-20 15:26 1176什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什 ... -
使用Spring发邮件
2009-11-07 14:15 934关于Spring的邮件发送的功能演示: (我把程序中一些敏感 ... -
Spring中的Quartz配置
2009-11-07 10:16 841Quartz是一个强大的企业级任务调度框架,Spring中继承 ... -
Spring ~IOC Annotations
2009-10-29 18:49 10091.1 零配置使用场合 IOC Annotations ...
相关推荐
主要对Spring AOP的相关概念和简单的静态代理、动态代理以及常见的几种AOP配置方式做总结学习。主要包括:1. AOP的常见概念 2. 静态代理 3. jdk动态代理 4. Aspectj and Aspectjweaver 5. **aop-config** 6. CGLIB ...
这个例子的功能是使用动态代理的思想实现一个spring简易的bean工厂和aop。
动态代理 实现简单分页 spring aop 实现简单分页
目前整个开发社区对AOP(Aspect Oriented Programing)推崇备至,也涌现出大量支持AOP的优秀Framework,--Spring, JAC, Jboss AOP 等等。...这里只是意图通过一个简单的例子向初学者展示一下如何来进行AOP。
对应的博客链接:http://blog.csdn.net/JQ_AK47/article/details/60469034#t12
手写简单实现ioc、aop事务demo,实现事务回滚,使用到了,工厂模式,动态代理
本文首先介绍了AOP 的基本思想,然后针对它在JAVA 语言 中的实现,具体介绍了JAVA 的动态代理来怎样实现一个简单的AOP 容器
一个简单实现的AOP框架。里面涵盖: 有配置文件,自定义注解,Bean容器,示例用的servicebean,产生动态代理对象的工具类等。
代理模式其实很简单 主要包括 接口+真实的实现类+代理类 在真实类的实例化的时候 使用代理类,所以需要 Spring AOP 做的是生成一个代理类,然后替换真实的类 去对外提供服务 那怎么去替换呢? 就是Spring IOC 容器中...
这是一个用Spring框架实现的AOP代理例子,简单易学
CGLIB代理 通过前面的学习可知,JDK的动态代理用起来非常简单,但它是有局限性的,使用动态代理的对象必须实现一个或多个接口。 那么,如何代理没有实现接口的类? CGLIB代理 CGLIB(Code Generation Library)是一...
哪怕没有看过源码的同学也应该知道,AOP是通过动态代理实现的,动态代理又分为两个部分:JDK动态代理和CGLIB动态代理 确实,Spring也就是通过这两种方式来实现AOP相关功能,下面就通过源码来简单求证下
为了简单起见,例子没有没有使用任何第三方的AOP Framework, 而是利用Java语言本身自带的动态代理功能来实现AOP. 让我们先回到AOP本身,AOP主要应用于日志记录,性能统计,安全控制,事务处理等方面。它的主要...
在Spring1.2或之前的版本中,实现AOP的传统方式就是通过实现Spring的AOP API来定义Advice,并设置代理对象。Spring根据Adivce加入到业务流程的时机的不同,提供了四种不同的Advice:Before Advice、After Advice、...
标题: 如何使用 Java 编写一个简单的 AOP 框架 作者: 超逮虾户 摘要: AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,它允许程序员以模块化的方式添加功能到应用程序。AOP 框架通过在程序...
老规矩,还是先看官方解释:AOP(Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。它是一种新的方
SimpleAop是用于Aop或动态代理编程的库。 我更简单地从。 这里包括以下库。 SimpleAop 它需要Aop或动态代理编程。 SimpleAop.Extensions.DependencyInjection 这里包括用于.NET Core或ASP.NET Core的...
概念 代理模式是基本的设计模式之一,它是开发者为了提供额外的或... Java动态代理实现机制采用了反射的思想,有关于反射的基础知识,可以参见博客Java发射机制浅析。 原理 Spring核心AOP实现技术之一是采用