﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava--随笔分类-spring</title><link>http://www.blogjava.net/dodoma/category/9020.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 04:12:25 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 04:12:25 GMT</pubDate><ttl>60</ttl><item><title>spring之aop:LogThrowAdvice</title><link>http://www.blogjava.net/dodoma/archive/2006/03/28/37768.html</link><dc:creator>dodoma</dc:creator><author>dodoma</author><pubDate>Tue, 28 Mar 2006 04:57:00 GMT</pubDate><guid>http://www.blogjava.net/dodoma/archive/2006/03/28/37768.html</guid><wfw:comment>http://www.blogjava.net/dodoma/comments/37768.html</wfw:comment><comments>http://www.blogjava.net/dodoma/archive/2006/03/28/37768.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dodoma/comments/commentRss/37768.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dodoma/services/trackbacks/37768.html</trackback:ping><description><![CDATA[
		<p>接口修改为<br />package net.blogjava.dodoma.spring.aop;</p>
		<p>public interface HelloI {<br /> public String sayHello(String firstName,String lastName)throws Exception;<br /> }<br /><br />类修改为<br />package net.blogjava.dodoma.spring.aop;</p>
		<p>import org.apache.commons.logging.Log;<br />import org.apache.commons.logging.LogFactory;</p>
		<p>public class Hello implements HelloI {<br /> protected static final Log log=LogFactory.getLog(Hello.class);<br /> private String msg;<br /> public Hello(){}<br /> public Hello(String msg){<br />  this.msg=msg;<br /> }<br /> <br /> public String getMsg() {<br />  return msg;<br /> }<br /> public void setMsg(String msg) {<br />  this.msg = msg;<br /> }<br /> public String sayHello(String firstName, String lastName) throws Exception{<br />  // TODO Auto-generated method stub<br />  log.info("in the class "+this.getClass().getName()+"'s method sayHello()");<br />  throw new Exception("here is a exception !");<br />  return (msg+" "+firstName+" "+lastName);<br /> }<br />}<br /><br /><br /><br />package net.blogjava.dodoma.spring.aop;</p>
		<p>import org.apache.commons.logging.Log;<br />import org.apache.commons.logging.LogFactory;<br />import org.springframework.aop.ThrowsAdvice;</p>
		<p>public class LogThrowAdvice implements ThrowsAdvice {<br /> protected static final Log log = LogFactory.getLog(LogThrowAdvice.class);<br /> public void afterThrowing(Exception e)throws Throwable{<br />  log.info("in the class "+this.getClass().getName()+"'s method afterThrowing()");<br />  log.info("the exception is "+e.getMessage());<br /> }<br />}<br /><br /><br />package net.blogjava.dodoma.spring.aop;</p>
		<p>import org.apache.commons.logging.Log;<br />import org.apache.commons.logging.LogFactory;<br />import org.springframework.aop.framework.ProxyFactory;<br />import org.springframework.beans.factory.BeanFactory;<br />import org.springframework.beans.factory.xml.XmlBeanFactory;<br />import org.springframework.core.io.ClassPathResource;<br />import org.springframework.core.io.Resource;</p>
		<p>public class HelloTest {<br /> protected static final Log log = LogFactory.getLog(HelloTest.class);</p>
		<p> /**<br />  * @param args<br />  * @throws Exception<br />  */<br /> public static void main(String[] args) throws Exception {<br />  // TODO Auto-generated method stub<br />  Resource rs = new ClassPathResource("beans.xml");<br />  BeanFactory bf = new XmlBeanFactory(rs);</p>
		<p>  HelloI h = (HelloI) bf.getBean("theBean");<br />  log.info("starting...");<br />  try {<br />   log.info(h.sayHello("ma", "bin"));<br />  } catch (Exception e) {<br />   e.printStackTrace();<br />  }<br />  log.info("end...");<br />  <br />  <br />  ProxyFactory factory=new ProxyFactory();<br />  factory.addAdvice(new LogThrowAdvice ());<br />  factory.setTarget(new Hello("hello"));<br />  try{<br />  HelloI hi=(HelloI)factory.getProxy();<br />  hi.sayHello("ma","bin");}<br />  catch(Exception e){e.printStackTrace();}<br /> }</p>
		<p>}<br /></p>
<img src ="http://www.blogjava.net/dodoma/aggbug/37768.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dodoma/" target="_blank">dodoma</a> 2006-03-28 12:57 <a href="http://www.blogjava.net/dodoma/archive/2006/03/28/37768.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring之aop:LogAroundAdvice</title><link>http://www.blogjava.net/dodoma/archive/2006/03/28/37766.html</link><dc:creator>dodoma</dc:creator><author>dodoma</author><pubDate>Tue, 28 Mar 2006 04:52:00 GMT</pubDate><guid>http://www.blogjava.net/dodoma/archive/2006/03/28/37766.html</guid><wfw:comment>http://www.blogjava.net/dodoma/comments/37766.html</wfw:comment><comments>http://www.blogjava.net/dodoma/archive/2006/03/28/37766.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/dodoma/comments/commentRss/37766.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dodoma/services/trackbacks/37766.html</trackback:ping><description><![CDATA[
		<p>LogAroundAdvice 通知<br />package net.blogjava.dodoma.spring.aop;</p>
		<p>import org.aopalliance.intercept.MethodInterceptor;<br />import org.aopalliance.intercept.MethodInvocation;<br />import org.apache.commons.logging.Log;<br />import org.apache.commons.logging.LogFactory;</p>
		<p>public class LogAroundAdvice implements MethodInterceptor {<br /> protected static final Log log = LogFactory.getLog(LogAroundAdvice.class);</p>
		<p> public Object invoke(MethodInvocation arg) throws Throwable {<br />  // 调用目标对象之前<br />  log.info("before the target object");<br />  Object val=arg.proceed();<br />  //调用目标对象之后<br />  log.info("the arg is "+arg);<br />  log.info("after the target object");<br />  return val;<br /> }</p>
		<p>}<br /><br />测试方法<br /><br />package net.blogjava.dodoma.spring.aop;</p>
		<p>import org.apache.commons.logging.Log;<br />import org.apache.commons.logging.LogFactory;<br />import org.springframework.aop.framework.ProxyFactory;<br />import org.springframework.beans.factory.BeanFactory;<br />import org.springframework.beans.factory.xml.XmlBeanFactory;<br />import org.springframework.core.io.ClassPathResource;<br />import org.springframework.core.io.Resource;</p>
		<p>public class HelloTest {<br /> protected static final Log log = LogFactory.getLog(HelloTest.class);</p>
		<p> /**<br />  * @param args<br />  * @throws Exception<br />  */<br /> public static void main(String[] args) throws Exception {<br />  // TODO Auto-generated method stub<br />  Resource rs = new ClassPathResource("beans.xml");<br />  BeanFactory bf = new XmlBeanFactory(rs);</p>
		<p>  HelloI h = (HelloI) bf.getBean("theBean");<br />  log.info("starting...");<br />  try {<br />   log.info(h.sayHello("ma", "bin"));<br />  } catch (Exception e) {<br />   e.printStackTrace();<br />  }<br />  log.info("end...");<br />  <br />  <br />  ProxyFactory factory=new ProxyFactory();<br />  factory.addAdvice(new LogAroundAdvice ());<br />  factory.setTarget(new Hello("hello"));<br />  try{<br />  HelloI hi=(HelloI)factory.getProxy();<br />  hi.sayHello("ma","bin");}<br />  catch(Exception e){e.printStackTrace();}<br /> }</p>
		<p>}<br /><br /></p>
<img src ="http://www.blogjava.net/dodoma/aggbug/37766.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dodoma/" target="_blank">dodoma</a> 2006-03-28 12:52 <a href="http://www.blogjava.net/dodoma/archive/2006/03/28/37766.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring之aop:LogAfterAdvice</title><link>http://www.blogjava.net/dodoma/archive/2006/03/28/37761.html</link><dc:creator>dodoma</dc:creator><author>dodoma</author><pubDate>Tue, 28 Mar 2006 04:37:00 GMT</pubDate><guid>http://www.blogjava.net/dodoma/archive/2006/03/28/37761.html</guid><wfw:comment>http://www.blogjava.net/dodoma/comments/37761.html</wfw:comment><comments>http://www.blogjava.net/dodoma/archive/2006/03/28/37761.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dodoma/comments/commentRss/37761.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dodoma/services/trackbacks/37761.html</trackback:ping><description><![CDATA[
		<p>接口和实现类见LogBeforeAdvice的例子<br />package net.blogjava.dodoma.spring.aop;</p>
		<p>import java.lang.reflect.Method;<br />import org.apache.commons.logging.Log;<br />import org.apache.commons.logging.LogFactory;<br />import org.springframework.aop.AfterReturningAdvice;</p>
		<p>public class LogAfterAdvice implements AfterReturningAdvice {<br /> protected static final Log log = LogFactory.getLog(LogAfterAdvice.class);<br /> public void afterReturning(Object returnVal, Method m, Object[] args,<br />   Object target) throws Throwable {<br />  // TODO Auto-generated method stub<br />  log.info("in the class "+this.getClass().getName()+"'s method afterReturning()");</p>
		<p>  log.info("the target class is:" + target.getClass().getName());<br />  log.info("the target method is:" + m.getName());</p>
		<p>  for (int i = 0; i &lt; args.length; i++) {<br />   log.info("the method's args is:" + args[i]);<br />  }<br />  <br />  log.info("the returnValue is "+returnVal);<br />  //测试,如果返回装备发生了异常.将如何处理程序流程<br />  //throw new Exception("返回装备发生异常");<br /> }</p>
		<p>}<br /><br />测试代码<br /><br />package net.blogjava.dodoma.spring.aop;</p>
		<p>import org.apache.commons.logging.Log;<br />import org.apache.commons.logging.LogFactory;<br />import org.springframework.aop.framework.ProxyFactory;<br />import org.springframework.beans.factory.BeanFactory;<br />import org.springframework.beans.factory.xml.XmlBeanFactory;<br />import org.springframework.core.io.ClassPathResource;<br />import org.springframework.core.io.Resource;</p>
		<p>public class HelloTest {<br /> protected static final Log log = LogFactory.getLog(HelloTest.class);</p>
		<p> /**<br />  * @param args<br />  * @throws Exception<br />  */<br /> public static void main(String[] args) throws Exception {<br />  // TODO Auto-generated method stub<br />  Resource rs = new ClassPathResource("beans.xml");<br />  BeanFactory bf = new XmlBeanFactory(rs);</p>
		<p>  HelloI h = (HelloI) bf.getBean("theBean");<br />  log.info("starting...");<br />  try {<br />   log.info(h.sayHello("ma", "bin"));<br />  } catch (Exception e) {<br />   e.printStackTrace();<br />  }<br />  log.info("end...");<br />  <br />  <br />  ProxyFactory factory=new ProxyFactory();<br />  factory.addAdvice(new LogAfterAdvice());<br />  factory.setTarget(new Hello("hello"));<br />  try{<br />  HelloI hi=(HelloI)factory.getProxy();<br />  hi.sayHello("ma","bin");}<br />  catch(Exception e){e.printStackTrace();}<br /> }</p>
		<p>}<br /><br /><br />在beans.xml中加入如下代码<br />&lt;bean id="theLogAfterAdvice" class="net.blogjava.dodoma.spring.aop.LogAfterAdvice"/&gt;<br /><br />&lt;property name="interceptorNames"&gt; <br />      &lt;list&gt; <br />        &lt;value&gt;theLogAfterAdvice&lt;/value&gt;&lt;!--此时直接使用advice,表明这个类所有的实例,方法,都享受advice的拦截--&gt;<br />       &lt;/list&gt; <br />&lt;/property&gt;<br /><br />切入点可省略,如需要的话<br />如<br /><br />&lt;!--切入点--&gt; <br />  &lt;!--Note: An advisor assembles pointcut and advice--&gt; <br />  &lt;bean id="theBeAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"&gt; <br />    &lt;property name="advice"&gt; <br />      &lt;ref local="theLogAfterAdvice"/&gt;<br />    &lt;/property&gt; <br />    &lt;!--匹配模式--&gt;<br />    &lt;property name="pattern"&gt; <br />      &lt;value&gt;.*&lt;/value&gt; <br />    &lt;/property&gt; <br />  &lt;/bean&gt;<br /><br /></p>
<img src ="http://www.blogjava.net/dodoma/aggbug/37761.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dodoma/" target="_blank">dodoma</a> 2006-03-28 12:37 <a href="http://www.blogjava.net/dodoma/archive/2006/03/28/37761.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring之aop:LogBeforeAdvice</title><link>http://www.blogjava.net/dodoma/archive/2006/03/28/37755.html</link><dc:creator>dodoma</dc:creator><author>dodoma</author><pubDate>Tue, 28 Mar 2006 04:02:00 GMT</pubDate><guid>http://www.blogjava.net/dodoma/archive/2006/03/28/37755.html</guid><wfw:comment>http://www.blogjava.net/dodoma/comments/37755.html</wfw:comment><comments>http://www.blogjava.net/dodoma/archive/2006/03/28/37755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dodoma/comments/commentRss/37755.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dodoma/services/trackbacks/37755.html</trackback:ping><description><![CDATA[
		<p>接口<br />package net.blogjava.dodoma.spring.aop;</p>
		<p>public interface HelloI {<br /> public String sayHello(String firstName,String lastName);<br /> }<br /><br />实现类<br />package net.blogjava.dodoma.spring.aop;</p>
		<p>import org.apache.commons.logging.Log;<br />import org.apache.commons.logging.LogFactory;</p>
		<p>public class Hello implements HelloI {<br /> protected static final Log log=LogFactory.getLog(Hello.class);<br /> private String msg;<br /> public Hello(){}<br /> public Hello(String msg){<br />  this.msg=msg;<br /> }<br /> public String getMsg() {<br />  return msg;<br /> }<br /> public void setMsg(String msg) {<br />  this.msg = msg;<br /> }<br /> public String sayHello(String firstName, String lastName) {<br />  // TODO Auto-generated method stub<br />  log.info("in the class "+this.getClass().getName()+"'s method sayHello()");<br />  return (msg+" "+firstName+" "+lastName);<br /> }<br />}<br /><br />BeforeAdvice通知<br /><br />package net.blogjava.dodoma.spring.aop;</p>
		<p>import java.lang.reflect.Method;</p>
		<p>import org.apache.commons.logging.Log;<br />import org.apache.commons.logging.LogFactory;<br />import org.springframework.aop.MethodBeforeAdvice;</p>
		<p>/**<br /> * 方法调用之前. <br /> * 先调用此方法<br /> * @author dodoma <br /> **/<br />public class LogBeforeAdvice implements MethodBeforeAdvice {<br /> protected static final Log log = LogFactory.getLog(LogBeforeAdvice.class);</p>
		<p> public void before(Method m, Object[] args, Object target) throws Throwable {<br />  log.info("in the class "+this.getClass().getName()+"'s method before()");</p>
		<p>  log.info("the target class is:" + target.getClass().getName());<br />  log.info("the target method is:" + m.getName());</p>
		<p>  for (int i = 0; i &lt; args.length; i++) {<br />   log.info("the method's args is:" + args[i]);<br />  }<br />  //测试,如果在before通知中发生了异常,程序流程将如何<br />  //throw new Exception("异常");<br /> }<br />}<br /></p>
		<p>测试类<br />package net.blogjava.dodoma.spring.aop;</p>
		<p>import org.apache.commons.logging.Log;<br />import org.apache.commons.logging.LogFactory;<br />import org.springframework.aop.framework.ProxyFactory;<br />import org.springframework.beans.factory.BeanFactory;<br />import org.springframework.beans.factory.xml.XmlBeanFactory;<br />import org.springframework.core.io.ClassPathResource;<br />import org.springframework.core.io.Resource;</p>
		<p>public class HelloTest {<br /> protected static final Log log = LogFactory.getLog(HelloTest.class);<br /> public static void main(String[] args) throws Exception {<br />  // TODO Auto-generated method stub<br /> //应用spring的ioc容器<br />  Resource rs = new ClassPathResource("beans.xml");<br />  BeanFactory bf = new XmlBeanFactory(rs);</p>
		<p>  HelloI h = (HelloI) bf.getBean("theBean");<br />  log.info("starting...");<br />  try {<br />   log.info(h.sayHello("ma", "bin"));<br />     } catch (Exception e) {<br />   e.printStackTrace();<br />  }<br />  log.info("end...");<br />  <br />  //如果没有使用spring的ioc,可以直接用如下代码测试<br />  ProxyFactory factory=new ProxyFactory();<br />  factory.addAdvice(new LogBeforeAdvice());//添加通知<br />  factory.setTarget(new Hello("hello"));//添加被代理的类实例<br />  try{<br />  HelloI hi=(HelloI)factory.getProxy();<br />  hi.sayHello("ma","bin");}<br />  catch(Exception e){e.printStackTrace();}<br /> }</p>
		<p>}<br /></p>
		<p>spring的配置文件beans.xml<br /><br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<a href="http://www.springframework.org/dtd/spring-beans.dtd">http://www.springframework.org/dtd/spring-beans.dtd</a>"&gt;</p>
		<p>&lt;beans&gt;</p>
		<p>&lt;!--享受日志的类--&gt;<br />&lt;bean id="theTargetBean" class="net.blogjava.dodoma.spring.aop.Hello"&gt;<br /> &lt;property name="msg"&gt; <br />     &lt;value&gt;hello&lt;/value&gt; <br />    &lt;/property&gt;<br />      <br />&lt;/bean&gt;</p>
		<p>&lt;!--advices--&gt;<br />&lt;bean id="theLogBeforeAdvice" class="net.blogjava.dodoma.spring.aop.LogBeforeAdvice"/&gt;<br /><br />&lt;!--CONFIG--&gt; <br />  &lt;bean id="theBean" class="org.springframework.aop.framework.ProxyFactoryBean"&gt; <br />    &lt;!--接口--&gt;<br />    &lt;property name="proxyInterfaces"&gt; <br />      &lt;value&gt;net.blogjava.dodoma.spring.aop.HelloI&lt;/value&gt; <br />    &lt;/property&gt;<br />    &lt;!--被代理的类--&gt; <br />    &lt;property name="target"&gt; <br />      &lt;ref local="theTargetBean"/&gt; <br />    &lt;/property&gt;<br />    &lt;!--加在代理类上的advice--&gt; <br />    &lt;property name="interceptorNames"&gt; <br />      &lt;list&gt; <br />        &lt;value&gt;theLogBeforeAdvice&lt;/value&gt;&lt;!--此时直接使用advice,表明这个类所有的实例,方法,都享受advice的拦截--&gt;<br />      &lt;/list&gt; <br />    &lt;/property&gt; <br />  &lt;/bean&gt;<br />   <br />  &lt;!--切入点,可以精确匹配类,方法,也可以不需要这个--&gt; <br />  &lt;!--Note: An advisor assembles pointcut and advice--&gt; <br />  &lt;bean id="theBeAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"&gt; <br />    &lt;property name="advice"&gt; <br />      &lt;ref local="theLogBeforeAdvice"/&gt;<br />    &lt;/property&gt; <br />    &lt;!--匹配模式--&gt;<br />    &lt;property name="pattern"&gt; <br />      &lt;value&gt;.*&lt;/value&gt; <br />    &lt;/property&gt; <br />  &lt;/bean&gt;<br />    <br />&lt;/beans&gt;<br /><br /></p>
<img src ="http://www.blogjava.net/dodoma/aggbug/37755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dodoma/" target="_blank">dodoma</a> 2006-03-28 12:02 <a href="http://www.blogjava.net/dodoma/archive/2006/03/28/37755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>