第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Spring 一二事(9) - xml 形式的 AOP

標(biāo)簽:
Java

AOP在spring中是非常重要的一个

在切面类中,有5种通知类型:

aop:before 前置通知

aop:after-returning 后置通知

aop:after 最终通知

aop:after-throwing 异常通知

aop:around 环绕通知

<bean id="personDAO" class="com.lee.spring002.aop.xml.PersonDAOImpl"></bean>
    <bean id="transaction" class="com.lee.spring002.aop.xml.Transaction"></bean>

    <aop:config >
        <!-- 切入点表达式,作用:确定目标类 -->
        <!-- spring 会自动检测这个表达式下的类是否是切面,如果是,则不会包含进来 -->
        <aop:pointcut expression="execution(* com.lee.spring002.aop.xml.PersonDAOImpl.*(..))" id="perform"/>
        <!-- ref 指向切面 -->
        <aop:aspect ref="transaction">
            <!-- 前置通知 -->
            <aop:before method="beginTransaction" pointcut-ref="perform"/>

            <!-- 
                后置通知
                    可以获取目标方法的返回值(前置方法获取不到)
                    如果目标方法抛出异常,后置通知则不会继续执行
             -->
            <aop:after-returning method="commit" pointcut-ref="perform" returning="val"/>

            <!-- 
                最终通知
                    无论目标方法是否抛出异常都将执行此方法
             -->
             <aop:after method="finallyDisplay" pointcut-ref="perform"/>

             <!-- 
                 异常通知
              -->
              <aop:after-throwing method="exception" pointcut-ref="perform" throwing="content"/>

              <!-- 
                  环绕通知
                      能控制目标方法能否执行
                      前置通知和后置通知能在目标方法的前后加代码,但是不能控制方法的执行
               -->
               <aop:around method="arround" pointcut-ref="perform"/>
        </aop:aspect>
    </aop:config>

IPersonDAO.java

1 package com.lee.spring002.aop.xml;
2 
3 public interface IPersonDAO {
4     public String savePerson();
5 }

PersonDAOImpl.java

package com.lee.spring002.aop.xml;

public class PersonDAOImpl implements IPersonDAO {

    @Override
    public String savePerson() {
        System.out.println("PersonDAOImpl - savePerson()");

//        int a = 1 / 0;

        return "save successfully";
    }

}

Transaction.java

package com.lee.spring002.aop.xml;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;

/**
 * 这是个切面
 * 
 * @author leechenxiang
 * @date 2016年1月12日
 *
 */
public class Transaction {

    public void beginTransaction(JoinPoint jp) {
        System.out.println("连接点名称: " + jp.getSignature().getName());
        System.out.println("目标类名称: " + jp.getTarget().getClass());
        System.out.println("Begin transaction...");
    }

    /**
     * 
     * @param jp
     * @param val 目标方法返回值,要与returning对应 
     */
    public void commit(JoinPoint jp, Object val) {
        System.out.println("Transaction commit...");

        System.out.println("returning: " + val.toString());
    } 

    public void finallyDisplay() {
        System.out.println("finally...");
    }

    public void exception(JoinPoint jp, Throwable content) {
        System.out.println("exception: " + content);
        System.out.println("exception: " + content.getMessage());
    }

    public void arround(ProceedingJoinPoint pjp) throws Throwable {
        System.out.println("arround...");
        pjp.proceed();    // 调用目标方法,如果这行不写,则目标方法不执行
    }
}

测试:

package com.lee.spring002.aop.xml;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TransactionTest {

    /**
     * 原理:
     *    1、当spring容器启动的时候,加载两个bean,对两个bean进行实例化
     *    2、当spring容器对配置文件解析到<aop:config>的时候
     *    3、把切入点表达式解析出来,按照切入点表达式匹配spring容器内容的bean
     *    4、如果匹配成功,则为该bean创建代理对象
     *    5、当客户端利用context.getBean获取一个对象时,如果该对象有代理对象,则返回代理对象
     *         如果没有代理对象,则返回对象本身
     */
    @Test
    public void testPerson() {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        IPersonDAO personDAO = (IPersonDAO)context.getBean("personDAO");
        personDAO.savePerson();
    }

}
點(diǎn)擊查看更多內(nèi)容
“小禮物走一走,來(lái)慕課關(guān)注我”
贊賞支持
風(fēng)間影月說(shuō) 去圍觀
創(chuàng)業(yè)公司技術(shù)總監(jiān), 10年+開(kāi)發(fā)和技術(shù)管理經(jīng)驗(yàn)。SUN認(rèn)證SCJP、PMP、MCP認(rèn)證。主要從事后端技術(shù)和架構(gòu)領(lǐng)域,有豐富的電商平臺(tái)與物流平臺(tái)核心系統(tǒng)的架構(gòu)設(shè)計(jì)和開(kāi)發(fā)經(jīng)驗(yàn)。
評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消