<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>


    posts - 10,comments - 4,trackbacks - 0

    接口
    package net.blogjava.dodoma.spring.aop;

    public interface HelloI {
    ?public String sayHello(String firstName,String lastName);
    ?}

    實現類
    package net.blogjava.dodoma.spring.aop;

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;

    public class Hello implements HelloI {
    ?protected static final Log log=LogFactory.getLog(Hello.class);
    ?private String msg;
    ?public Hello(){}
    ?public Hello(String msg){
    ??this.msg=msg;
    ?}
    ?public String getMsg() {
    ??return msg;
    ?}
    ?public void setMsg(String msg) {
    ??this.msg = msg;
    ?}
    ?public String sayHello(String firstName, String lastName) {
    ??// TODO Auto-generated method stub
    ??log.info("in the class "+this.getClass().getName()+"'s method sayHello()");
    ??return (msg+" "+firstName+" "+lastName);
    ?}
    }

    BeforeAdvice通知

    package net.blogjava.dodoma.spring.aop;

    import java.lang.reflect.Method;

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.springframework.aop.MethodBeforeAdvice;

    /**
    ?* 方法調用之前.
    ?* 先調用此方法
    ?* @author dodoma
    ?**/
    public class LogBeforeAdvice implements MethodBeforeAdvice {
    ?protected static final Log log = LogFactory.getLog(LogBeforeAdvice.class);

    ?public void before(Method m, Object[] args, Object target) throws Throwable {
    ??log.info("in the class "+this.getClass().getName()+"'s method before()");

    ??log.info("the target class is:" + target.getClass().getName());
    ??log.info("the target method is:" + m.getName());

    ??for (int i = 0; i < args.length; i++) {
    ???log.info("the method's args is:" + args[i]);
    ??}
    ??//測試,如果在before通知中發生了異常,程序流程將如何
    ??//throw new Exception("異常");
    ?}
    }

    測試類
    package net.blogjava.dodoma.spring.aop;

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.springframework.aop.framework.ProxyFactory;
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.beans.factory.xml.XmlBeanFactory;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.core.io.Resource;

    public class HelloTest {
    ?protected static final Log log = LogFactory.getLog(HelloTest.class);
    ?public static void main(String[] args) throws Exception {
    ??// TODO Auto-generated method stub
    ?//應用spring的ioc容器
    ??Resource rs = new ClassPathResource("beans.xml");
    ??BeanFactory bf = new XmlBeanFactory(rs);

    ??HelloI h = (HelloI) bf.getBean("theBean");
    ??log.info("starting...");
    ??try {
    ???log.info(h.sayHello("ma", "bin"));
    ?????} catch (Exception e) {
    ???e.printStackTrace();
    ??}
    ??log.info("end...");
    ??
    ??//如果沒有使用spring的ioc,可以直接用如下代碼測試
    ??ProxyFactory factory=new ProxyFactory();
    ??factory.addAdvice(new LogBeforeAdvice());//添加通知
    ??factory.setTarget(new Hello("hello"));//添加被代理的類實例
    ??try{
    ??HelloI hi=(HelloI)factory.getProxy();
    ??hi.sayHello("ma","bin");}
    ??catch(Exception e){e.printStackTrace();}
    ?}

    }

    spring的配置文件beans.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "

    <beans>

    <!--享受日志的類-->
    <bean id="theTargetBean" class="net.blogjava.dodoma.spring.aop.Hello">
    ?<property name="msg">
    ??? ?<value>hello</value>
    ??? </property>
    ?????
    </bean>

    <!--advices-->
    <bean id="theLogBeforeAdvice" class="net.blogjava.dodoma.spring.aop.LogBeforeAdvice"/>

    <!--CONFIG-->
    ? <bean id="theBean" class="org.springframework.aop.framework.ProxyFactoryBean">
    ??? <!--接口-->
    ??? <property name="proxyInterfaces">
    ????? <value>net.blogjava.dodoma.spring.aop.HelloI</value>
    ??? </property>
    ??? <!--被代理的類-->
    ??? <property name="target">
    ????? <ref local="theTargetBean"/>
    ??? </property>
    ??? <!--加在代理類上的advice-->
    ??? <property name="interceptorNames">
    ????? <list>
    ??????? <value>theLogBeforeAdvice</value><!--此時直接使用advice,表明這個類所有的實例,方法,都享受advice的攔截-->
    ??????</list>
    ??? </property>
    ? </bean>
    ??
    ? <!--切入點,可以精確匹配類,方法,也可以不需要這個-->
    ? <!--Note: An advisor assembles pointcut and advice-->
    ? <bean id="theBeAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
    ??? <property name="advice">
    ????? <ref local="theLogBeforeAdvice"/>
    ??? </property>
    ??? <!--匹配模式-->
    ??? <property name="pattern">
    ????? <value>.*</value>
    ??? </property>
    ? </bean>
    ?? ?
    </beans>

    主站蜘蛛池模板: 国产亚洲欧美在线观看| 亚洲第一成年人网站| 亚洲AV日韩AV无码污污网站| 永久免费AV无码国产网站| 91亚洲精品麻豆| 最近的中文字幕大全免费版| 亚洲乱码中文字幕小综合| 成人无遮挡裸免费视频在线观看 | 亚洲综合国产成人丁香五月激情 | 歪歪漫画在线观看官网免费阅读| 亚洲美女在线观看播放| 亚色九九九全国免费视频| 中文字幕亚洲男人的天堂网络| 成全视频免费高清| 免费无码AV一区二区| 亚洲中文字幕久久精品无码喷水| 最近免费中文字幕中文高清| 亚洲av无码一区二区三区不卡| 最近中文字幕大全免费视频| 2020久久精品亚洲热综合一本| 免费观看男人免费桶女人视频| 特级一级毛片免费看| 亚洲精品乱码久久久久久| 120秒男女动态视频免费| 亚洲日本va一区二区三区| 亚洲国产小视频精品久久久三级 | 亚洲依依成人精品| 国产人妖ts在线观看免费视频| 免费人成网站永久| 亚洲视频在线观看不卡| 青青青国产免费一夜七次郎| 一区二区免费在线观看| 亚洲综合久久综合激情久久 | 免费人成毛片动漫在线播放| 亚洲一区二区三区在线网站| 亚洲国产成人精品91久久久| 久久免费福利视频| 在线观看国产一区亚洲bd| 国产AV无码专区亚洲A∨毛片| 毛色毛片免费观看| 在线成人精品国产区免费|