2020-09-01 spring ioc、aop

2020-09-01

今日計(jì)劃:看完代碼規(guī)劃,糾結(jié)一下要不要買國行健身環(huán)!不買國行,買日版哈哈哈哈哈哈哈哈哈哈哈哈我買好了

2020-09-02

今日計(jì)劃:

  • 去營業(yè)廳問社??ǖ氖虑? 下午去問
  • 注冊(cè)任天堂賬號(hào),倆。 等游戲機(jī)到了再注冊(cè)
  • 再了解一下aop ioc

IOC容器

控制反轉(zhuǎn),減低耦合
ioc底層就是對(duì)象工廠

1、xml配置文件,配置創(chuàng)建的對(duì)象
image.png

image.png
  • spring提供ioc容器實(shí)現(xiàn)的兩種方式
    • BeanFactory(一般不提供開發(fā)人員使用):加載配置文件時(shí),不創(chuàng)建對(duì)象。在獲取/使用對(duì)象時(shí),才創(chuàng)建對(duì)象。
    • ApplcationContext(BeanFactory的子接口,更強(qiáng)大,一般由開發(fā)人員使用):在加載配置文件時(shí),就會(huì)在配置文件中就創(chuàng)建對(duì)象。
  • ApplicationContext接口有實(shí)現(xiàn)類
IOC操作bean管理
  • bean管理指:1)創(chuàng)建對(duì)象 2)注入屬性

  • bean管理操作2種:
    1)基于xml配置文件方式實(shí)現(xiàn)

    image.png

    • image.png
  • DI:注入屬性
    1)set方法注入
    在spring配置文件配置對(duì)象創(chuàng)建,配置屬性注入


    image.png

2)有參構(gòu)造注入


image.png

image.png

2020-09-03

繼續(xù)學(xué)習(xí)spring 打好基礎(chǔ) 沖?。?!

- 字面量(就是屬性的賦值)
  • null值
    image.png
  • 屬性值中包含特殊符號(hào) (eg.value里面有<<>>)
    image.png
2、注入屬性-外部bean

service調(diào)用dao,就是引用外部bean
在配置文件中操作: 在service中注入dao


image.png
3、注入屬性-內(nèi)部bean和級(jí)聯(lián)賦值

(與數(shù)據(jù)庫一對(duì)多,多對(duì)多有關(guān)系)

  • 一對(duì)多關(guān)系,部門和員工
    在實(shí)體類中表示一對(duì)多的關(guān)系:

    先創(chuàng)建兩個(gè)類
    image.png

    用對(duì)象的屬性類型進(jìn)行表示

    再在spring配置文件中進(jìn)行配置:內(nèi)部bean
    image.png
4、注入屬性-級(jí)聯(lián)賦值

修改配置文件
外部bean:ref是引入根據(jù)bean的id引入property'


image.png

第二種寫法

1、注入數(shù)組、list集合、map集合類型屬性


類的編寫
  • 寫配置文件 bean的配置
    • 集合類型:1、對(duì)象創(chuàng)建2、屬性注入


      數(shù)組

      list

      map

      set
      • 如果注入的list,里面值是對(duì)象


        先創(chuàng)建多個(gè)對(duì)象

        5、把集合注入部分提取出來

    • 引入名稱空間util
      image.png
    • 使用util標(biāo)簽完成list集合注入提取
      image.png
IOC操作Bean管理(FactoryBean)
  • bean有2種:普通bean(在配置文件中的定義類型和調(diào)用時(shí)的返回類型是一樣的)和工廠bean(定義類型和返回類型可以不一樣)
    • 工廠bean:創(chuàng)建類,實(shí)現(xiàn)接口factorybean,實(shí)現(xiàn)接口的方法,可以用泛型,在實(shí)現(xiàn)的方法中定義返回的bean類型
      image.png
      配置和調(diào)用
IOC操作Bean管理(bean的作用域)
  • 在spring中,設(shè)置bean是單實(shí)例還是多實(shí)例。默認(rèn)是單實(shí)例。
    • 單實(shí)例對(duì)象,地址相同
      image.png
      image.png
    • 設(shè)置單實(shí)例還是多實(shí)例:bean標(biāo)簽中有設(shè)置的屬性scope,單實(shí)例(singleton),多實(shí)例(Protype)。
      image.png
      • 設(shè)置singleton的時(shí)候,spring配置文件的時(shí)候就會(huì)創(chuàng)建單實(shí)例對(duì)象;設(shè)置protype,不是在spring加載配置文件的時(shí)候創(chuàng)建的,是在調(diào)用getbean方法的時(shí)候創(chuàng)建的多實(shí)例對(duì)象。
IOC操作Bean管理(bean生命周期)

生命周期:對(duì)象從創(chuàng)建到銷毀的過程。

  • 1通過構(gòu)造器創(chuàng)建對(duì)象(無參構(gòu)造)
    image.png
  • 2為bean的屬性設(shè)置值和其他bean的引用(調(diào)用set方法)

  • 3把bean的實(shí)例傳給bean后置處理器的方法

  • 4調(diào)用bean的初始化方法(要配置)
    寫了一個(gè)方法
    配置
  • 5把bean的實(shí)例傳給bean后置處理器的方法


    先寫個(gè)類
    會(huì)給所有bean添加這個(gè)后置處理器
  • 6bean可以使用了(對(duì)象獲取到了)
    image.png
  • 7當(dāng)容器關(guān)閉時(shí),調(diào)用bean的銷毀方法(要配置,要手動(dòng)銷毀)
    image.png
    image.png
    手動(dòng)銷毀,close方法

    4、bean的后置處理器,bean的生命周期有7步

IOC操作Bean管理(xml自動(dòng)裝配)用的很少,一般用注解
  • 根據(jù)指定裝配規(guī)則(屬性名稱或者屬性類型),spring自動(dòng)將匹配的屬性進(jìn)行注入
    自動(dòng)裝配 bean的屬性autowire 常用值:byname屬性名稱,bytype屬性類型


    根據(jù)屬性名稱自動(dòng)裝配

    根據(jù)類型
IOC操作Bean管理(外部屬性文件)

先引入jar包

  • 直接配置連接池
    寫死的
  • 引入外部屬性文件配置數(shù)據(jù)庫連接池


    image.png

    引入配置文件中,名稱空間


    context

    在spring配置文件中引入
    用表達(dá)式

IOC操作Bean管理(基于注解方式)

  • 結(jié)構(gòu):@注解名稱(屬性名稱=屬性值,屬性名稱=屬性值)
  • 目的:簡化xml配置
  • Spring提供的注解:
    • @Component
    • @Service
    • @Controller
    • @Repository
  • 創(chuàng)建對(duì)象
    1、引入aop依賴jar包

    2、開啟組件掃描
    image.png

    3、在類上面
    4個(gè)注解都可以,value可以省略,類的名稱首字母小寫

    掃描包,找到注解,創(chuàng)建對(duì)象

    4、細(xì)節(jié)配置,
    只掃描controller

    不掃描controller

基于注解,屬性的注入

  • @AutoWired:根據(jù)屬性類型進(jìn)行自動(dòng)裝配

    • 1、service和dao對(duì)象創(chuàng)建
      image.png

      、serviec類上加@service

    • 2、service里注入dao
      用@AutoWired
  • @Qualifier:根據(jù)屬性名稱進(jìn)行注入
    image.png
    • image.png
  • @Resource:根據(jù)類型或?qū)傩悦Q注入,resource是javax擴(kuò)展包里的,不是spring里的


    根據(jù)類型

    名字

    根據(jù)名稱注入
  • @Value:普通類型屬性注入(比如string)


    image.png

純注解開發(fā)

  • 創(chuàng)建配置類,在類上加上@Configuration,@ComponentSca

    n(basepackage={包的路徑})
    image.png
  • 編寫測(cè)試類
    用annotationconfigapplicationcotext

AOP

  • aop底層使用動(dòng)態(tài)代理。
    • 有接口情況 用 jdk動(dòng)態(tài)代理實(shí)現(xiàn):創(chuàng)建接口實(shí)現(xiàn)類的代理對(duì)象,實(shí)現(xiàn)增強(qiáng)方法。


      image.png
    • 沒有接口情況 CGLIB動(dòng)態(tài)代理
      創(chuàng)建當(dāng)前類的子類的代理對(duì)象 來增強(qiáng)方法


      image.png

AOP(JDK代理)底層原理: 使用proxy類:返回指定接口的代理類的實(shí)例 調(diào)用newProxyInstance方法

步驟:

1、
有個(gè)接口

2、
有個(gè)實(shí)現(xiàn)類

3、
有個(gè)代理對(duì)象

4、
寫具體增強(qiáng)實(shí)現(xiàn)類

5、
通過有參構(gòu)造,把實(shí)現(xiàn)類的實(shí)例傳進(jìn)代理類來

6、
在invoke方法中實(shí)現(xiàn)增強(qiáng)邏輯

7、
在代理類中傳參

AOP術(shù)語

  • 連接點(diǎn)


    image.png
  • 切入點(diǎn)


    image.png
  • 通知(增強(qiáng))


    image.png
    image.png
  • 切面


    image.png

AOP操作(準(zhǔn)備)

  • 基于AspectJ(一個(gè)獨(dú)立的框架)實(shí)現(xiàn)AOP操作:使用基于注解方式實(shí)現(xiàn)
  • 引入aop、aspectj相關(guān)依賴


    image.png
  • 切入點(diǎn)(實(shí)際要增強(qiáng)的方法)表達(dá)式:知道要對(duì)哪個(gè)類的哪個(gè)方法進(jìn)行增強(qiáng)
    • image.png

      image.png

AOP操作(AspectJ注解方式)

1、創(chuàng)建類
image.png

2、創(chuàng)建增強(qiáng)類,編寫增強(qiáng)邏輯(用不同方法實(shí)現(xiàn)5種通知)


image.png

3、進(jìn)行通知的配置:

  • 在spring配置文件中,開啟注解掃描。
    image.png
  • 使用注解創(chuàng)建User和UserProxy對(duì)象。

    在兩個(gè)類上加注解@Component
    image.png
  • 在增強(qiáng)類上添加注解@Aspect.
    image.png
  • 在spring配置文件中開啟生成代理對(duì)象。


    image.png

    4、 配置不同類型的通知:在增強(qiáng)類中,在作為通知方法上面添加通知類型注解,使用切入點(diǎn)表達(dá)式配置


    before注解,前置通知

    5、相同切入點(diǎn)抽取
    image.png

    6、多個(gè)增強(qiáng)類,設(shè)置優(yōu)先級(jí)

  • 在增強(qiáng)類的上面添加注解@Order(1)//(數(shù)字越小,優(yōu)先級(jí)越高)

AOP操作(AspectJ配置文件)

建一個(gè)book類


再建一個(gè)增強(qiáng)類

配置文件中創(chuàng)建對(duì)象

image.png

完全注解開發(fā)

  • 配置類加@Configuration和@ComponentScan(basePackages={"xxx.xx"})和@EnableAspectAutoProxy(proxyTargetClass=true)


    image.png

JdbcTemplate:方便對(duì)數(shù)據(jù)庫的增刪改查

  • 引入相關(guān)jar包
  • 在spring配置文件中配置數(shù)據(jù)庫連接池
    image.png
  • 創(chuàng)建jdbctem對(duì)象,注入datasource
  • image.png

    image.png

    image.png

事務(wù)ACID

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容