首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Linux频道
中国IT教育
Google
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME Java&XML 开源技术 其他技术 RSS订阅 论坛 专题
您现在的位置: 中国IT实验室 >> Java >> 开源技术 >> Spring >> 正文

Java编程—Spring AOP本质(6)

文章来源本站原创 作者佚名 更新时间2008-5-15 保存本文保存本文 推荐给好友推荐给好友 收藏本页收藏本页
还有很多接口和类没有画出,这里简要说明下。
 
在org.springframework.aop.support包下,还有一些很重要的切点类,是Spring定义好的,几乎可以满足所用应用的需要。
DynamicMethodMatcherPointcut
NameMatchMethodPointcut
Perl5RegexpMethodPointcut
StaticMethodMatcherPointcut
JdkRegexpMethodPointcut
ControlFlowPointcut
ComposablePointcut
 
与这些切点对应,还有一些切面类,名字都是以PointcutAdvisor结尾。
 
通过上面的原理图,简单查看一下API,就可以直到,通过通知Advice和切点Pointcut可以生成通知者Advisor。有了通知者,有了目标对象,就可以通过ProxyFactory生成代理对象。
 
下面给个例子看看Spring如何通过切点来选取类和方法的,并如通知所选取的方法。
 
例子:扩展StaticMethodMatcherPointcut,实现静态切入点过滤。
 
/**
* 业务组件:BeanOne
*/
public class BeanOne {
    public void foo() {
        System.out.println("BeanOne的foo()被调用!");
    }    
    public void bar() {
        System.out.println("BeanOne的bar()被调用!");
    }
}
 
/**
* 业务组件:BeanTwo
*/
public class BeanTwo {
    public void foo() {
        System.out.println("BeanTwo的foo()被调用!");
    }    
    public void bar() {
        System.out.println("BeanTwo的bar()被调用!");
    }
}
 
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

/**
* 自定义通知:Advice
*/
public class SimpleAdvice implements MethodInterceptor {
    public Object invoke(MethodInvocation invocation) throws Throwable {
        System.out.println(">> 业务方法调用前动作,被代理调用目标方法是: " + invocation.getMethod().getName());
        Object retVal = invocation.proceed();
        System.out.println(">> 业务方法调用结束后动作!");
        return retVal;
    }
}
 
import java.lang.reflect.Method;
import org.springframework.aop.ClassFilter;
import org.springframework.aop.support.StaticMethodMatcherPointcut;

/**
* 自定义静态切入点:Pointcut
*/
public class SimpleStaticPointcut extends StaticMethodMatcherPointcut {

    public boolean matches(Method method, Class cls) {
        //类方法名为foo时候匹配
        System.out.println("切入点方法匹配,正在匹配"+cls.getName()+"的"+method.getName()+"方法!");
        return ("foo".equals(method.getName()));
    }

    public ClassFilter getClassFilter() {
        return new ClassFilter() {
            public boolean matches(Class cls) {
                System.out.println("切入点类匹配,正在匹配"+cls.getName()+"类!");
                //BeanOne类匹配
                return (cls == BeanOne.class);
            }
        };
    }
}

上一页  [1] [2] [3] 下一页

【责编:Ken】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 ·Java入门 Tomcat的配置技巧精华专题…
 ·Oracle RMAN物理备份技术详解…
 今日更新
· J2ME手机游戏:Canvas类基本绘图实例
· J2ME手机游戏:Canvas类基本绘图应用
· J2ME手机游戏:TimerTask与Timer类的应用
· J2ME手机游戏:运行实现Runnable接口的类
· J2ME手机游戏设计:Thread类
· J2EE综合:Struts上传多个文件的例子
· 推荐:Blogjava备份数据的阅读器
· SpringSide 3.0.1接踵而来
· 对J2EE应用系统分层设计的思考
· 利用WebSphere创建和管理ESB解决方案
 社区讨论
 博客论点
 频道精选
· 新版CCNA考试大纲 07年8月1日生效
· 新手学习宝典:Linux常用命令全集
· 知已知彼,深入了解系统安全知识
· 从入门到精通 java初学者实践系列教程
· 共同学习——Oracle入门基础专题
· ADO.net与PowerBuilder的综合比较
· 评论:中国互联网“钱”途何在?
· 中科院:龙芯要成"中国奔腾" 能卖1亿颗
 Java 频道导航
新手入门
安装配置 | 开发工具 | JDK | oop面向对象
核心技术
SwingAwtApplet | 高级编程 | 网络编程Jvm技术 | JavaMedia
高级技术
设计模式 | UML/OO | p2p/Jxta | 多线程 | JavaSecurity
J2EE
J2ee核心 | Servlet/Jsp | EJB
| JDBC/JDO | Rmi/Corba/Jini | Mvcwea | 应用服务器
J2ME
核心技术 | 嵌入式 | 无线开发
Java&XML
XMLBeans | WebServices
开源技术
ANT | Struts | Hibernate | Spring
Eclipse | JBoss | Tomcat | JUnit
其他技术