Springboot初識--Bean的理解

註解下的Spring Ioc.

Spring所提供的兩個核心理念,一個是控制反轉(Inversion of Control,IoC),另一個是面向切面編程(Aspect Oriented Progarmming,AOP),IoC容器是spring的核心,可以說是Spring是一種基於IoC容器編程的框架(我更喜歡稱之爲CRUD框架),因爲Spring Boot是基於註解的開發Spring IoC,,所以我們使用全註解的方式來理解Spring IoC技術。
在初學java的時候,我們更喜歡用new來創建對象,而在Spring中卻不是,它是通過描述來創建對象的。Spring Boot中並不建議你用xml,而是通過註解的描述來生成對象。
一個系統可以生成多個對象,並且對這些對象進行管理,對象之間不是獨立,相互之間還存在依賴關係。例如一個班級是由多個學生和老師組成的,那麼一個班級就是依賴於學生和老師,老師和學生之間又是相互有關聯的。爲此Spring還提供了依賴注入的功能,是我們能夠通過描述來管理各個對象的關係。
爲了描述上述的班級,同學,老師這三個對象的關係,我們需要一個容器。在Spring中把每一個需要管理的對象稱之爲Spring Bean,而Spring管理這Bean的容器,被我們稱之爲Spring IoC容器。IoC容器需要具備兩個基本功能:

  • 通過管理描述Bean,包括髮布和獲取Bean;
  • 通過描述完成Bean之間依賴的關係;

IoC容器簡介

Spring IoC容器是一個管理Bean的容器,在Spring的定義中,他需要所有的接口都實現接口BeanFactory,他是一個頂級容器。

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package org.springframework.beans.factory;

import org.springframework.beans.BeansException;
import org.springframework.core.ResolvableType;
import org.springframework.lang.Nullable;

public interface BeanFactory {
    String FACTORY_BEAN_PREFIX = "&";
	//多個獲取bean的方法
    Object getBean(String var1) throws BeansException;
	
    <T> T getBean(String var1, Class<T> var2) throws BeansException;

    Object getBean(String var1, Object... var2) throws BeansException;

    <T> T getBean(Class<T> var1) throws BeansException;

    <T> T getBean(Class<T> var1, Object... var2) throws BeansException;
	//注入方法(具體功能還沒深入理解)
    <T> ObjectProvider<T> getBeanProvider(Class<T> var1);

    <T> ObjectProvider<T> getBeanProvider(ResolvableType var1);
	//是否包含bean
    boolean containsBean(String var1);
	//bean是否單例
    boolean isSingleton(String var1) throws NoSuchBeanDefinitionException;
	//bean是否原型
    boolean isPrototype(String var1) throws NoSuchBeanDefinitionException;
	//bean類型匹配
    boolean isTypeMatch(String var1, ResolvableType var2) throws NoSuchBeanDefinitionException;

    boolean isTypeMatch(String var1, Class<?> var2) throws NoSuchBeanDefinitionException;
	//獲取類型
    @Nullable
    Class<?> getType(String var1) throws NoSuchBeanDefinitionException;

    @Nullable
    Class<?> getType(String var1, boolean var2) throws NoSuchBeanDefinitionException;
	//獲取別名
    String[] getAliases(String var1);
}

在源碼中可以看到多個getBean的方法,這些是從IoC容器中獲取Bean的重要方法,isSingleton方法判斷Bean是否在SpringIoC中爲單例,,在默認請看下,Bean都是以單例爲存在的,也就是使用getBean返回的對象都是同一個,如果isPrototype返回爲true,那麼我們使用getBean方法獲取Bean的時候,SpringIoC容器就會創建一個新的Bean給調用者。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章