本站首页    管理页面    写新日志    退出


«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


公告

戒除浮躁,读好书,交益友


我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:邢红瑞的blog
日志总数:523
评论数量:1142
留言数量:0
访问次数:9711700
建立时间:2004年12月20日




[java语言]深入浅出 spring AOP (四)
原创空间,  软件技术

邢红瑞 发表于 2005/12/12 13:54:34

spring的Advice分为5种,Before,After returning,Around,Throws,Introduction。使用这些Advice可以完成AOP相关部分90%的编码,剩余的10%只好依靠AspectJ了。在大多数情况下,around advice可以完成Before,After returning,Throws的所有功能。Before advice是比较有用的advice,它可以修改传递给method的参数,可以通过异常中断method的执行,通常用于检测用户的权限。Servlet过滤器是Before advice的一种方式,提供了在servlet调用前执行其他处理的能力。下面给个例子接口package org.tatan.test;  public interface Worker {     void doSomeWork(int numOfTimes); }类文件package org.tatan.test;public class WorkerBean implements Worker {     public void doSomeWork(int numOfTimes) {        for (int i = 0; i < numOfTimes; i++) {            System.out.print(i);        }    }}advicepackage org.tatan.test;import java.lang.reflect.Method;import org.springframework.aop.MethodBeforeAdvice;import org.springframework.aop.framework.ProxyFactory;import org.springframework.beans.factory.support.AbstractBeanFactory;import org.springframework.beans.factory.xml.XmlBeanFactory;import org.springframework.core.io.ClassPathResource;import org.springframework.core.io.Resource;    public class SimpleBeforeAdvice implements MethodBeforeAdvice {        public static void main(String[] args) {     Resource res = new ClassPathResource("org/tatan/test/bean2.xml");        AbstractBeanFactory ft = new XmlBeanFactory(res);         //Instantiate an object        Worker testObject = (Worker) ft.getBean("businesslogicbean");        testObject.doSomeWork(100);    }        public void before(Method method, Object[] args, Object target)            throws Throwable {        System.out.println("Before method: " + method.getName());    }    }配置文件<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC  "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans> <bean id="businesslogicbean"  class="org.springframework.aop.framework.ProxyFactoryBean">  <property name="proxyTargetClass">   <value>true</value>  </property>  <property name="singleton">   <value>false</value>  </property>  <property name="exposeProxy">   <value>true</value>  </property>  <property name="proxyInterfaces">   <value>org.tatan.test.Worker</value>  </property>  <property name="target">   <ref local="beanTarget" />  </property>  <property name="interceptorNames">   <list>    <value>BeforeAdvice</value>    <value>loggingInterceptor</value>   </list>  </property>  </bean> <bean id="BeforeAdvice" class="org.tatan.test.SimpleBeforeAdvice" /> <bean id="loggingInterceptor"  class="org.springframework.aop.interceptor.TraceInterceptor" /> <bean id="beanTarget" class="org.tatan.test.WorkerBean" /></beans>Spring使用TraceInterceptor,你可以把她添加到你的代理bean中当作一个拦截器。TransactionProxyFactoryBean有"preInterceptors"和 "postInterceptors"属性,ProxyFactoryBean只有"interceptorNames"属性,这和springlive第九章有点出入,log4j配置文件,详见我的blog(http://blogger.org.cn/blog/more.asp?name=hongrui&id=7968#11881)log4j.propertieslog4j.rootLogger=INFO,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n log4j.logger.org.springframework.aop.interceptor.TraceInterceptor=DEBUGcommons-logging.propertiesorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger写这篇blog的时候,得到竹十一的大力协助,在此表示感谢。  


阅读全文(8980) | 回复(2) | 编辑 | 精华
 


回复:深入浅出 spring AOP (四)
原创空间,  软件技术

java118(游客)发表评论于2006/3/21 10:48:45

楼上的,用<list>  <value>adive1</value>  <value>adive2</value><list>就行啊。


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:深入浅出 spring AOP (四)
原创空间,  软件技术

jslzl(游客)发表评论于2005/12/14 18:11:22

在spring中,我们常用service层的bo来做事务,但是同时我也想实现为bo提供日志,这样一来,一个bo需要对应两了FactoryBean(事务&日志) 这如何在spring中实现呢,望告知

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.063 second(s), page refreshed 144799574 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号