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

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
  • 基于泛型的自動裝配(Spring4新增的內(nèi)容,和SPI使用方式相似,只不過Spring提供了更簡便的使用方式。API:應(yīng)用編程接口。SPI:針對服務(wù)框架開發(fā)或者一些工具的基礎(chǔ)使用的特殊類型接口。)

    基于依賴對象泛型的自動裝配案例

    步驟1:

    public class IntegerStore {

    }

    public class StringStore{

    @Autowired

    private IntegerStore s2;

    public void print(){

    System.out.println("s2: ?"+s2);

    }

    }

    步驟2:

    @Configuration

    public class StoreConfig {

    @Bean

    public StringStore stringStore(){

    return new StringStore();

    }

    @Bean

    public IntegerStore integerStore(){

    return new IntegerStore();

    }

    }

    步驟4:測試

    @Test

    public void testStore(){

    ApplicationContext ac=new AnnotationConfigApplicationContext(StoreConfig.class);

    StringStore ss=ac.getBean("stringStore",StringStore.class);

    ss.print();

    }

    結(jié)果:(如果不加@Autowired注解,s2:為空)

    s2: ?IntegerStore@3323f4c5

    基于集合泛型的自動裝配(注意:不能使用@Autowired注解,要使用@Resource注解,并且使用@Resource(name="名字1"),去匹配@Bean(name="名字1")。

    步驟1:

    public class IntegerStore {

    }

    public class StringStore {

    public StringStore() {

    System.out.println("無參構(gòu)造方法執(zhí)行了");

    }

    private List<IntegerStore> list;

    @Resource(name = "ll")

    public void setList(List<IntegerStore> list) {

    this.list = list;

    }

    public void print() {

    for (IntegerStore store : list) {

    System.out.println(store);

    }

    }

    }

    步驟2:

    @Configuration

    public class StoreConfig {

    @Bean(name = "ll")

    public List<IntegerStore> ll() {

    List<IntegerStore> lis = new ArrayList<IntegerStore>();

    lis.add(new IntegerStore());

    lis.add(new IntegerStore());

    lis.add(new IntegerStore());

    return lis;

    }


    @Bean(name = "stringStore")

    public StringStore stringStore() {

    return new StringStore();

    }

    }

    測試:

    @Test

    public void testStore() {

    ApplicationContext ac = new AnnotationConfigApplicationContext(StoreConfig.class);

    StringStore ss = ac.getBean("stringStore", StringStore.class);

    ss.print();

    }

    }

    結(jié)果:

    無參構(gòu)造方法執(zhí)行了

    IntegerStore@2b2c8b14

    IntegerStore@795ee430

    IntegerStore@44d74990

    Autowired擴(kuò)展——自定義qualifier注解(自定義自動化注入配置)

    https://img1.sycdn.imooc.com//5ce8c92a00015b4211260626.jpg






    查看全部
  • Advisors

    1、advisor就像一個小的自包含的方面,只有一個advice。

    2、切面自身通過一個bean表示,并且必須實(shí)現(xiàn)某個advice接口,同時,advisor也可以很好的利用AspectJ的切入點(diǎn)表達(dá)式(后面介紹AspectJ實(shí)現(xiàn)AOP時會介紹到AspectJ的切入點(diǎn)表達(dá)式)。

    3、Spring通過配置文件中<aop:advisor>元素支持advisor,實(shí)際使用中,大多數(shù)情況下它會和transactional advice(事物相關(guān)的advice)配合使用(也可以有其他使用方式,根據(jù)項(xiàng)目或者工程的實(shí)際情況來決定)。

    4、為了定義一個advisor的優(yōu)先級以便讓advice可以有序,可以使用order屬性來定義advisor的順序。

    advisor的配置(<tx:advice>是對于事物的相關(guān)聲明,通過這種方式使用advisor,這種方式是在使用Spring事物的控制時,經(jīng)常使用的方式

    https://img1.sycdn.imooc.com//5ce89feb00014bee09060386.jpg

    案例:(沒有講解advisor的案例,講解了環(huán)繞通知的一個案例,適用場景:統(tǒng)計(jì)邏輯功能方法的調(diào)用次數(shù),例如統(tǒng)計(jì)某方法調(diào)用3次,就不讓調(diào)用了)

    步驟1:

    public class ServiceFunction {

    public void print1(){

    System.out.println("邏輯功能方法1執(zhí)行了");

    }

    public void print2(){

    System.out.println("邏輯功能方法2執(zhí)行了");

    throw new RuntimeException();

    }

    }

    步驟2:

    public class AspectFunction {

    private int max_times;

    public int getMax_times() {

    return max_times;

    }

    public void setMax_times(int max_times) {

    this.max_times = max_times;

    }

    public Object aspectFunction(ProceedingJoinPoint pjp) throws Throwable{

    int num_times=0;

    do{

    num_times++;

    try{

    System.out.println(num_times+"次");

    return pjp.proceed();

    }catch(RuntimeException e){

    }

    }while(num_times<=max_times);

    System.out.println("方法總共執(zhí)行了"+num_times+"次");

    return null;

    }

    }

    步驟3:

    https://img1.sycdn.imooc.com//5ce8b07a00011f4011710618.jpg

    查看全部
    0 采集 收起 來源:Advisors

    2019-05-25

  • 什么是spring

    查看全部
    0 采集 收起 來源:Spring概況

    2019-05-24

  • Introductions應(yīng)用(簡介的advice,作用:在不改變對象和類的代碼的前提下,為對象和類添加新的方法。)

    Introduction定義:簡介允許一個切面聲明一個實(shí)現(xiàn)指定接口的通知對象,并且提供一個接口實(shí)現(xiàn)類(接口的實(shí)現(xiàn)類,來代表實(shí)例化好的Bean)來代表這些對象。


    Introductions的實(shí)現(xiàn):由<aop:aspect>中的<aop:declare-parents>元素聲明,該元素用于聲明所有匹配的類型,擁有一個新的parent(接口聲明的對象可以指向getBean獲得的對象)。

    <aop:declare-parents>屬性

    type-matching="expression表達(dá)式(表示匹配什么樣的類型)。

    implement-interface="接口的路徑"(切面類的接口)。

    default-impl=“切面類的路徑”。

    案例:

    步驟1:編寫邏輯功能接口(限制邏輯功能),并提供它的實(shí)現(xiàn)類。


    public interface ServiceInterfaceFunction {

    public void print();

    }

    public class ServiceFunction implements ServiceInterfaceFunction {


    @Override

    public void print() {

    System.out.println("邏輯功能接口實(shí)現(xiàn)類的方法執(zhí)行了");

    }

    }

    public class ServiceGongNeng {


    }

    步驟2:配置<aspect:config>(有接口的SpringAOP實(shí)現(xiàn),使用JavaSE動態(tài)代理,也就是JDK代理,JDK動態(tài)代理只能對實(shí)現(xiàn)了接口的類生成代理,而不能針對類,所以要配置<aop:declare-parents>)。

    步驟3:測試


    @Test

    public void testaop(){

    ApplicationContext ac=new ClassPathXmlApplicationContext("spring-aop-schema-advice.xml");

    ServiceInterfaceFunction sif=(ServiceInterfaceFunction)ac.getBean("serviceGongNeng",ServiceGongNeng.class);

    sif.print();

    }

    結(jié)果:正??梢詧?zhí)行接口實(shí)現(xiàn)類里的方法。(注意:types-matching="springAOP.ServiceGongNeng"沒有execution)

    重點(diǎn)擴(kuò)展:所有基于配置文件的aspects,只支持單例模式(Single Model)。





    查看全部
  • Advice應(yīng)用下

    Around advice(環(huán)繞通知):切面方法的第一個參數(shù)必須是ProceedingJoinPoint類型。(并且在這個切面方法里,有一個proceed()方法:當(dāng)前業(yè)務(wù)方法的返回值,無論是void類型還是其他類型返回值,都使用Object retVal=pjp.proceed()這種方式,業(yè)務(wù)方法執(zhí)行前(這行代碼前)業(yè)務(wù)方法執(zhí)行后(這行代碼后),都可以做我們的切面功能,最后返回retVal對象。)

    https://img1.sycdn.imooc.com//5ce743490001e30311240513.jpg

    Around advice案例(配置了環(huán)繞通知,拋出異常通知就無效了,因?yàn)榄h(huán)繞通知的方法始終有返回值,pjp.proceed()表示邏輯方法的執(zhí)行,如果邏輯方法拋出異常,根據(jù)是否要進(jìn)行處理在環(huán)繞通知的方法里進(jìn)行捕獲或者往外拋出

    步驟1:spring配置

    https://img1.sycdn.imooc.com//5ce74b6300018f3916130649.jpg


    步驟2:切面的環(huán)繞通知方法。

    public Object aroundAspect(ProceedingJoinPoint pjp){

    Object obj=null;

    try {

    System.out.println("切面的前環(huán)繞通知功能實(shí)現(xiàn)了");

    obj = pjp.proceed();

    System.out.println("切面的后環(huán)繞通知功能實(shí)現(xiàn)了");

    } catch (Throwable e) {

    e.printStackTrace();

    }

    return obj;

    }

    Advice parameters(通知方法里的參數(shù)):邏輯功能方法的參數(shù),通過配置,可以傳入到切面的通知方法里。

    案例(環(huán)繞通知參數(shù))

    步驟1:編寫邏輯功能的方法,并有兩個參數(shù)。

    https://img1.sycdn.imooc.com//5ce74eca000169d109070344.jpg

    步驟2:編寫配置文件,切面、環(huán)繞通知等(注意:配置方法里的參數(shù)名要和邏輯方法參數(shù)名相同,并且環(huán)繞通知方法名和參數(shù)名相同)。

    https://img1.sycdn.imooc.com//5ce751700001a1e517680726.jpg測試:

    @Test

    public void test(){

    ApplicationContext ac=new ClassPathXmlApplicationContext("spring-aop-schema-advice.xml");

    ServiceFunction sf=ac.getBean("serviceFunction",ServiceFunction.class);

    sf.serviceFunction("小明",5);

    }

    結(jié)果:

    切面前置通知功能實(shí)現(xiàn)了

    名字為小明

    5次

    切面的前環(huán)繞通知功能實(shí)現(xiàn)了

    邏輯功能實(shí)現(xiàn)了

    切面的后環(huán)繞通知功能實(shí)現(xiàn)了

    切面后置通知功能實(shí)現(xiàn)了

    切面返回后通知功能實(shí)現(xiàn)了






    查看全部
  • Advice應(yīng)用(advice的配置)

    Before advice的兩種配置方式

    <aop:before ?pointcut-ref="切入點(diǎn)的Id" ?method="切面的方法"/>。直接設(shè)置切入點(diǎn)(就不用單獨(dú)設(shè)置<aop:point-cut/>標(biāo)簽了)

    <aop:before ?pointcut="execution(* ?com.xyz.myapp.dao..(..))" ?method="doAccessCheck"/>

    https://img1.sycdn.imooc.com//5ce654d0000125f910660486.jpg案例:(前置)

    https://img1.sycdn.imooc.com//5ce6554f0001513d11120508.jpg步驟1:編寫邏輯功能類、切面功能類、并編寫各自的方法。

    代碼:

    https://img1.sycdn.imooc.com//5ce685000001ad7607220261.jpg

    https://img1.sycdn.imooc.com//5ce685000001ce4307710284.jpg

    步驟2:編寫XML配置,實(shí)例化邏輯功能類的Bean和切面功能類的Bean,配置切面、切入點(diǎn)、通知。

    https://img1.sycdn.imooc.com//5ce68b9a0001125014720528.jpg

    案例:(After return advice返回后通知)

    <aop:after-returning>returning屬性,限制方法的返回值,例如retVal。(arg-names為參數(shù)名稱,它是嚴(yán)格匹配的。)

    步驟1:編寫邏輯功能類、切面功能類、并編寫各自的方法(和以上相似,只不過切面類多了一個方法)。

    https://img1.sycdn.imooc.com//5ce68bf40001c2fd09060290.jpg

    步驟2:編寫XML配置,實(shí)例化邏輯功能類的Bean和切面功能類的Bean,配置切面、切入點(diǎn)、通知。

    https://img1.sycdn.imooc.com//5ce68cf00001d93a15340551.jpg

    案例:(拋出異常后通知After throwing advice,<aop:after-throwing>標(biāo)簽多了一個throwing屬性,它是限制可被傳遞的異常參數(shù)名稱)

    步驟1:編寫邏輯功能類、切面功能類、并編寫各自的方法(編寫發(fā)生異常后切面要執(zhí)行的方法)

    https://img1.sycdn.imooc.com//5ce68fe40001465108840400.jpg

    步驟2:編寫XML配置,實(shí)例化邏輯功能類的Bean和切面功能類的Bean,配置切面、切入點(diǎn)、拋出異常通知。

    https://img1.sycdn.imooc.com//5ce6904500010b0315550578.jpg

    案例:(后置通知After (finally) advice)

    步驟1:編寫邏輯功能類、切面功能類、并編寫各自的方法(編寫邏輯方法執(zhí)行后要執(zhí)行的切面方法)

    https://img1.sycdn.imooc.com//5ce6917a00013b2008410449.jpg

    步驟2編寫XML配置,實(shí)例化邏輯功能類的Bean和切面功能類的Bean,配置切面、切入點(diǎn)、拋出異常通知。

    https://img1.sycdn.imooc.com//5ce6918700010fa915440595.jpg

    案例:(環(huán)繞通知After (finally) advice)

    步驟1:編寫邏輯功能類、切面功能類、并編寫各自的方法(編寫邏輯方法執(zhí)行后要執(zhí)行的切面方法)

    步驟2編寫XML配置,實(shí)例化邏輯功能類的Bean和切面功能類的Bean,配置切面、切入點(diǎn)、拋出異常通知。



    查看全部
  • spring是一個輕量級的 控制反轉(zhuǎn)(Ioc)和面向切面(AOP)的容器框架

    IOC:????輕量級的控制反轉(zhuǎn),達(dá)到松耦合的目的

    ? ? ? ? ? ?將控制權(quán)交出去,使用時得到對象

    AOP:面向切面,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級服務(wù)進(jìn)行內(nèi)聚性的開發(fā)----例如倉庫管理的業(yè)務(wù)邏輯和日志記錄的系統(tǒng)服務(wù)

    ? ? ? ? ? 事務(wù)管理,日志等


    查看全部
    0 采集 收起 來源:Spring概況

    2019-05-21

  • spring 資源

    查看全部
  • 配置切入點(diǎn)Pointcut(找到某個功能模塊的具體方法)

    execution用于匹配某個功能模塊的具體方法。

    https://img1.sycdn.imooc.com//5ce603a40001500610720613.jpg

    以下SpringAOP和Spring支持的AspectJ都支持。

    圖一的1:執(zhí)行所有的public方法時,進(jìn)行切入(執(zhí)行相應(yīng)切面的相應(yīng)功能)。

    圖一的2:執(zhí)行所有的set方法時,進(jìn)行切入。

    圖一的3:執(zhí)行com.xy.service.AccountService類下的所有方法時,進(jìn)行切入。

    圖一的4:執(zhí)行com.xyz.service包下的所有方法時,進(jìn)行切入。

    圖一的5:執(zhí)行com.xyz.service包下以及子包下的所有方法時,進(jìn)行切入。


    https://img1.sycdn.imooc.com//5ce295d90001bf3e11270608.jpg

    以下為SpringAOP自己支持的。

    https://img1.sycdn.imooc.com//5ce2964a0001710210930537.jpg

    SpringAOP其他的匹配。

    圖一的1:匹配目標(biāo)對象。

    圖一的2:匹配參數(shù)的。

    圖一的3:按注解匹配的。

    圖一的4:按注解匹配的。

    圖一的5:按注解匹配的。

    圖二的1:參數(shù)里采用了何種注解。

    圖二的2:采用了何種bean。

    圖二的3:bean是以何種形式進(jìn)行結(jié)尾的。(這些可以去Spring官方文檔和搜索引擎搜索,會有很全面的解釋,這些切入點(diǎn)會有很多類型,在具體使用時,可以查找相應(yīng)文檔)


    https://img1.sycdn.imooc.com//5ce2969b00017f6111150634.jpg

    https://img1.sycdn.imooc.com//5ce60c610001250910950417.jpg

    整的AOP配置(根據(jù)不同業(yè)務(wù)需求,查找相關(guān)文檔,進(jìn)行不同的expression表達(dá)式配置)

    案例1:表示執(zhí)行service包下的所有類的任何類型的方法時,進(jìn)行切入。

    https://img1.sycdn.imooc.com//5ce297590001291911170338.jpg

    案例2:表示執(zhí)行SystemArchitecture的businessService()方法時,才進(jìn)行切入。

    https://img1.sycdn.imooc.com//5ce60f130001a97411300239.jpg

    案例3:執(zhí)行AspectBiz中的所有方法,都會進(jìn)行切入。

    https://img1.sycdn.imooc.com//5ce61147000103c511460511.jpg

    配置以某個單詞結(jié)尾的類:例如上面Aspect編寫成*。

    查看全部
  • 基于Schema-based配置的AOP實(shí)現(xiàn)

    Spring所有的切面和通知器都必須放在<aop:config>內(nèi)(可以配置多個<aop:config>元素),每一個<aop:config>可以包含aspect,pointcout和advisor元素(它們必須按照這個順序進(jìn)行聲明)。

    <aop:config>的配置大量使用了Spring的自動代理機(jī)制。

    https://img1.sycdn.imooc.com//5ce290350001655210510570.jpg該配置的含義:一個類作為切面來聲明,切面Id是myAspect,也就是說程序執(zhí)行某個功能模塊時,通過pointcut和Joinpoint執(zhí)行該切面的功能。

    案例:兩個類,一個類作為切面類,另一個作為業(yè)務(wù)類。(注意:<beans>中添加約束,xmlns:aop="http://www.springframework.org/schema/aop

    代碼:

    <?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"

    ? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    ? ? ? ? xmlns:context="http://www.springframework.org/schema/context"

    ? ? ? ? xmlns:aop="http://www.springframework.org/schema/aop"

    ? ? xsi:schemaLocation="http://www.springframework.org/schema/beans

    ? ? ? ? http://www.springframework.org/schema/beans/spring-beans.xsd

    ? ? ? ? http://www.springframework.org/schema/context

    ? ? ? ? http://www.springframework.org/schema/context/spring-context.xsd ?

    ? ? ? ? http://www.springframework.org/schema/aop

    ? ? ? ? http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">

    ? ? ? ? <bean id="aspectImooc" class="aspect.AspectImooc"></bean>

    ? ? ? ? <bean id="ServiceImooc" class="aspect.ServiceImooc"></bean>

    ? ? ? ? <aop:config>

    ? ? ? ? <aop:aspect id="aspectImoocAop" ref="aspectImooc"></aop:aspect>

    ? ? ? ? </aop:config>


    查看全部
  • AOP基本概念及特點(diǎn)

    一、什么是AOP及實(shí)現(xiàn)方式

    AOP:Aspect ?Oriented ?Programming,面向切面編程,通過預(yù)編譯方式和運(yùn)行期動態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。

    主要功能:日志記錄,性能統(tǒng)計(jì),安全控制,事物處理,異常處理等等。(事務(wù)處理:任何操作數(shù)據(jù)庫的方法,尤其是增刪改,需要事物的處理,使用AOP時,執(zhí)行到某種類型的方法,或者某一層的類,自動開啟事物和獲取連接、提交事物、關(guān)閉事物的步驟,簡化了操作)

    AOP實(shí)現(xiàn)方式:1——預(yù)編譯方式。(AspectJ)

    ? ? ? ? ? ? ? ? ? ? ? ? ?2——運(yùn)行期動態(tài)代理。(JDK動態(tài)代理、CGLib動態(tài)代理)

    ? ? ? ? ? ? ? ? ? ? ? ?(SpringAOP、JbossAOP)

    https://img1.sycdn.imooc.com//5ce263db00013a0c07680593.jpg切面的理解:例如系統(tǒng)中有產(chǎn)品管理、訂單管理、服務(wù)管理等等模塊(子功能),任一模塊(子功能),都需要記錄它的日志,控制它的事物,以及做一些安全驗(yàn)證的功能。但是如果在每一個模塊(子功能)中去設(shè)計(jì)日志、事物、安全驗(yàn)證,會帶來大量工作量,尤其當(dāng)項(xiàng)目達(dá)到一定規(guī)模時,比如修改日志記錄的方式,那么則需要修改每一個模塊的日志功能,通過切面方式對開發(fā)人員是不可見的,當(dāng)執(zhí)行任一模塊時,通過預(yù)編譯或者運(yùn)行期動態(tài)代理方式,都會去記錄它的日志,實(shí)現(xiàn)了一處寫功能,處處可實(shí)現(xiàn)的方式,對于開發(fā)人員允許不知道有這樣功能的存在,這樣就簡化了操作(修改日志、編寫事物等),業(yè)務(wù)功能橫向走,切面垂直業(yè)務(wù)功能。

    二、AOP基本概念(切面—>織入—>目標(biāo)對象—>切入點(diǎn)—>連接點(diǎn)—>通知—>引入—>AOP代理:“切面”要執(zhí)行的動作,通過“織入”與所有功能模塊進(jìn)行聯(lián)系,又通過“目標(biāo)對象”找到具體功能模塊,通過“切入點(diǎn)”將要查找某個功能的某個方法,通過“連接點(diǎn)”找到該功能的特定方法的開始,通過“通知”將要執(zhí)行何種切面的動作,通過“引入”引入該動作用到的對象和方法,通過“AOP代理”實(shí)現(xiàn)該方法。)

    AOP相關(guān)概念:

    1、切面(Aspect):一個關(guān)注點(diǎn)(事物),這個關(guān)注點(diǎn)可能會橫切多個對象(產(chǎn)品管理、訂單管理)。

    2、連接點(diǎn)(Joinpoint):程序執(zhí)行過程中的某個特定的點(diǎn)。(一個類中執(zhí)行的某個方法的開始)。

    3、通知(Advice):在切面的某個特定的連接點(diǎn)上執(zhí)行的動作(方法執(zhí)行的時候,切面額外執(zhí)行的動作,比如說方法執(zhí)行時,開啟事物提交功能)。

    4、切入點(diǎn)(Pointcut):匹配連接點(diǎn)的斷言,在AOP中通知和一個切入點(diǎn)表達(dá)式關(guān)聯(lián)(在切面中匹配一個具體的連接點(diǎn)(某個功能的方法的開始))。

    5、引入(Introduction):在不修改類代碼的前提下,修改的是字節(jié)碼文件,為類添加新的方法和屬性。(類似于編譯期動態(tài)的修改class文件去增加新的屬性和方法,源代碼中并沒有這樣的屬性和方法),取決于使用AspectJ和SpringAOP的實(shí)現(xiàn)方式,使用方式不同,為類添加屬性和方法的方式是有區(qū)別的。

    6、目標(biāo)對象(Target Object):被一個或者多個切面所通知的對象。(例如存在一個訂單的service(對象)和一個商品的service(對象),執(zhí)行該模塊的功能時,切面會通知相對應(yīng)的service,在執(zhí)行數(shù)據(jù)庫操作時,去加上事物的控制,這兩個service就是目標(biāo)對象)。

    7、AOP代理(AOP ?Proxy):AOP框架創(chuàng)建的對象,用來實(shí)現(xiàn)切面契約(aspect contract),包括通知方法執(zhí)行等功能(這里執(zhí)行的方法指的是切面里的執(zhí)行相應(yīng)操作所用到的方法)開發(fā)時不知道這個對象存在的,也不清楚會創(chuàng)建成什么樣子。

    8、織入(Weaving):把切面連接到其他的應(yīng)用程序類型或者對象上,并創(chuàng)建一個被通知的對象,分為:編譯時織入、類加載時織入、執(zhí)行時織入。(使切面和對象(模塊功能)牽連起來)

    Spring官方文檔給出的解釋:

    https://img1.sycdn.imooc.com//5ce536ae00012a8611320642.jpg

    Advice(通知)的類型(在切面某個特定連接點(diǎn)執(zhí)行的動作)

    前置通知(Before advice):在某連接點(diǎn)(join point)(某個功能方法開始執(zhí)行前)之前執(zhí)行的通知,但不能阻止連接點(diǎn)前的執(zhí)行(除該方法外的其他方法的執(zhí)行)(除非它拋出一個異常)。

    返回后通知(After returning advice):在某連接點(diǎn)(方法)正常完成后執(zhí)行的通知(將要執(zhí)行的切面功能)。

    拋出異常后通知(After throwing advice):在方法拋出異常退出時執(zhí)行的通知(將要執(zhí)行切面的功能)。

    后通知(After(finally)advice):當(dāng)某連接點(diǎn)(方法)退出的時候執(zhí)行的通知(切面將要執(zhí)行的功能)(不論是正常返回還是異常退出都會執(zhí)行的通知)。

    環(huán)繞通知(Around Advice):包圍一個連接點(diǎn)(join point)的通知(在整個方法的內(nèi)部都有切面要執(zhí)行的功能存在,不分前后)。

    https://img1.sycdn.imooc.com//5ce53aff00010f0511260614.jpg

    Spring框架中AOP的用途:

    用途1:提供了聲明式的企業(yè)服務(wù)(也可以是其他服務(wù),例如互聯(lián)網(wǎng)服務(wù)),特別是EJB(重量級框架)的替代服務(wù)的聲明。

    用途2:允許用戶定制自己的方面(切面),以完成OOP(面向?qū)ο缶幊?,模擬世界中行為和方式,可以理解為實(shí)現(xiàn)一個功能的順序)與AOP(橫切的方式,可以理解為各個功能之間橫切的一種功能)的互補(bǔ)使用,可以實(shí)現(xiàn)自己橫切的功能。

    三、Spring中的AOP(Spring中AOP的實(shí)現(xiàn)方式以及特點(diǎn))

    特點(diǎn)1:純java實(shí)現(xiàn),無需特殊的編譯過程(普通代碼需要加載才能執(zhí)行),不需要控制類加載器層次??梢愿玫倪M(jìn)行控制(使用類加載器應(yīng)當(dāng)謹(jǐn)慎,容易方法生ClassNotFound異常這種情況)。

    特點(diǎn)2:目前只支持方法執(zhí)行連接點(diǎn)(通知Spring Bean的方法執(zhí)行),(在執(zhí)行某方法時,才去執(zhí)行切面的功能)。

    特點(diǎn)3:SpringAOP不是為了提供最完整的AOP實(shí)現(xiàn)(盡管它非常強(qiáng)大);而是側(cè)重于提供一種AOP實(shí)現(xiàn)和Spring IoC容器之間的整合,用于幫助解決企業(yè)應(yīng)用中的常見問題。

    特點(diǎn)4:SpringAOP不會與AspectJ(完整的、全面的AOP解決方案)競爭,也不會提供綜合全面的AOP解決方案。

    有接口和無接口的SpringAOP實(shí)現(xiàn)區(qū)別:(一個類是否實(shí)現(xiàn)了某個接口,例如一個ProductService接口,一個ProductServiceImpl實(shí)現(xiàn)了該接口,在這類上切入的切面就是有接口的AOP)

    SpringAOP對于有接口的使用標(biāo)準(zhǔn)的JavaSE動態(tài)代理作為AOP代理,這使得任何接口(或者接口集)都可以被代理。

    SpringAOP對于沒有接口的實(shí)現(xiàn)類中使用CGLIB代理(如果一個業(yè)務(wù)對象并沒有實(shí)現(xiàn)一個接口)

    四、Schema-based 實(shí)現(xiàn)AOP(基于配置文件實(shí)現(xiàn)AOP)

    五、API實(shí)現(xiàn)AOP(基于API實(shí)現(xiàn)AOP)

    六、AspectJ實(shí)現(xiàn)AOP



    查看全部
  • https://img1.sycdn.imooc.com//5ce26d4e0001114f08090454.jpgbean容器初始化https://img1.sycdn.imooc.com//5ce26dde00018fe007760444.jpghttps://img1.sycdn.imooc.com//5ce270100001603808060436.jpg

    查看全部
    0 采集 收起 來源:IOC及Bean容器

    2019-05-20

  • <aop:declare-parents?types-matching?=?"com.imooc.aop.shema.advice.biz.*(+)"
    ?????????????????????implement-interface?=?"com.imooc.aop.shema.advice.Fit"
    ?????????????????????default-impl?=?"com.imooc.aop.shema.advice.FitImpl"/>
    對所有匹配到的類都增加一個方法實(shí)現(xiàn),F(xiàn)itImpl,這里是所有匹配到的biz類都可以轉(zhuǎn)為Fit類?????????????????
    >


    查看全部
  • Bean管理的注解實(shí)現(xiàn)及例子

    1、Classpath掃描與組件管理

    定義:從Spring3.0開始,Spring JavaConfig項(xiàng)目提供很多特性,包括通過注解定義Bean,而不是使用XML。

    @Component:通用型注解,可用于任何Bean。

    @Repository:通常用于注解DAO類,即持久類。

    @Service:通常用于注解Service類,即服務(wù)層。

    @Controller:通常用于注解Controller,即控制層。

    2、類的自動檢測與注冊Bean

    定義:Spring可以檢測到類上和屬性上以及方法上的注解,可以通過注解進(jìn)行實(shí)例化或注入。

    3、<context:annotation-config/>

    定義:基于XML配置,如果使用該標(biāo)簽,則在描述中添加約束。

    https://img1.sycdn.imooc.com//5ce224ed0001984d10780418.jpghttps://img1.sycdn.imooc.com//5ce2258c0001969a10690590.jpg<context:component-scan>:一般處理類上的注解,它的功能包含<context:annotation-config>的功能,比較常用。

    <context:annotation-config>:一般處理實(shí)例化Bean的屬性和方法的注解。

    SpringXML配置過濾器作用:掃描特定包下的特定注解。

    https://img1.sycdn.imooc.com//5ce252ca0001574811540623.jpg

    4、@Component,@Repository,@Service,@Controller

    5、@Required

    6、@Autowired

    7、@Qualifier

    8、@Resource


    查看全部
  • https://img1.sycdn.imooc.com//5ce24dfb0001e15209890381.jpg關(guān)于AOP配置相關(guān)

    查看全部

舉報(bào)

0/150
提交
取消
課程須知
Java的高級課程,適合對Java基礎(chǔ)知識應(yīng)用自如,并熟悉MVC架構(gòu)的小伙伴們。如果想成為一名Java工程師,這門課程是一定要學(xué)噠。
老師告訴你能學(xué)到什么?
掌握依賴注入、IOC和AOP的概念,并能進(jìn)行簡單應(yīng)用。

微信掃碼,參與3人拼團(tuán)

微信客服

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

幫助反饋 APP下載

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

公眾號

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

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復(fù)購買,感謝您對慕課網(wǎng)的支持!