« | September 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | |
| 公告 |
戒除浮躁,读好书,交益友 |
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的时候,得到竹十一的大力协助,在此表示感谢。
|
|
回复:深入浅出 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 »
|