個人總結一些spring知識點

Spring

IOC(控制反轉)

1. 把程序創建對象的控制權轉移到第三方。

2. 滿足依賴倒轉原則

  • 誰控制誰:在傳統的開發模式下,我們都是採用直接 new 一個對象的方式來創建對象,也就是說你依賴的對象直接由你自己控制,但是有了 IOC 容器後,則直接由 IoC 容器來控制。所以“誰控制誰”,當然是 IoC 容器控制對象。
  • 控制什麼:控制對象。
  • 爲何是反轉:沒有 IoC 的時候我們都是在自己對象中主動去創建被依賴的對象,這是正轉。但是有了 IoC 後,所依賴的對象直接由 IoC 容器創建後注入到被注入的對象中,依賴的對象由原來的主動獲取變成被動接受,所以是反轉。
  • 哪些方面反轉了:所依賴對象的獲取被反轉了。

3. IOC的實現方式有依賴注入

  • 依賴注入有3種方式:set方法注入,構造方法注入,其他方式注入。配置文件加載後,bean已經創建好了,放入spring容器裏面了

  • Set方式注入:
    String注入:直接value注入
    對象注入:用ref注入
    數組[]注入:<array></value></value></array>\注入
    List注入:<list></value></value></list>\注入
    Map注入:<map><entry key="" value=""/></map>\注入
    Set集合注入:<set></value></value></set>\注入

4. Bean的作用域(默認是單例)

  1. singleton:單例
    生命週期:
    創建:配置文件一讀就創建
    活着:只要容器沒有關閉,就一直活着
    死了:容器關閉
  2. prototype:原型模式,每次getBean都會產生一個新的對象
    生命週期:
    創建:什麼時候使用,什麼時候創建
    活着:對象一直被用,就一直活着
    死了:太久沒用被垃圾回收機制回收
  3. request: http請求,每次請求都會創建一個新的bean
  4. session: 每次會話創建新的
  5. application:
  6. websocket:

5. Spring種Bean的三種裝配方式

  1. 在xml種顯示的配置(前面的都是這種)
  2. 在java中顯示配置:在bean標籤中 加入autowire屬性,value可以是byName,byType。
  3. 隱式的自動裝配bean(重要)
  • 開啓註解支持
    @Autowired(require=true):自動注入,假如爲false,則該屬性可以爲空,默認是通過byName實現
    @Resource:也是自動裝配,默認通過byname,如果找不到名字,則通過byType
    @Qualifier(value=“dog222”):直接指定找哪個注入
    @Nullable:字段標記了該註解,說明可以爲空

6. 註解開發

要使用註解開發,必須導入aop的包,並指定要開啓註解掃描的包
@Component:在類上加,標明該類是一個組件
@Repository,@Service,@Controller:是@Component衍生的註解,在dao,service,controller使用
@Scope:標明作用域
@Value(“laowang”):在屬性上加,相當於給屬性注入值

7. javaConfig

@Configuration:在類使用,表明是配置類
@Bean:在配置類中方法使用,相當於寫了bean標籤

AOP(面向切面編程)

1. 靜態代理

實現同一個接口,然後對其增加附屬操作即可

2. 動態代理(CGlib)

動態代理類實現InvocationHandler接口
調用proxy類靜態方法new一個proxy對象

3. AOP的實現方式

  • 方式一:使用springAPI接口
    1.讓日誌類實現***Advice接口,具體作什麼附屬操作
    2.在xml中配置bean
    3.配置aop
    先配置切入點< aop:pointcut id="" expression=“expression(***)” >
    在配置做什麼增強,相當於把bean和這個切點作綁定
    < aop:advisor advice-ref=“上面的bean的id”,pointcut-ref=“切點id”>

  • 方式二:自定義類配置切面實現AOP(比方式一多了切面配置)
    1.寫一個日誌類,具體作什麼附屬操作
    2.在xml中配置bean
    3.配置aop
    先配置切面:< aop:aspect ref=“日誌類”></aop:aspect>
    在切面中配置切點:< aop:pointcut id=" " expression=“expression(***)” >
    接着配置通知,在方法前,後調用: < aop:before method=“before” pointcut-ref=“切點id” >

  • 方式三:使用註解實現
    1.在切面類加上@Compnent,@Aspect註解
    2.方法加上@Beafore,@After(參數是切入點表達式expression=“expression(***)”)
    3.開啓註解支持

4. 聲明式事務

  1. 配置一個bean:事務管理器
  2. 配置事務通知:
    < tx:advice id=“txAdvice” transaction-manager=“事務管理器id”>
    3.在事務通知裏配置哪些方法需要開啓事務:
    < tx:method name:“add”>
    4.最後用方式一方式配置事務的切入
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章