Spring IOC基礎回顧 — 組件掃描和裝配

[TOC]java

註解形式配置應用IOC

在類定義、方法定義、成員變量定義前使用,格式:@註解標記名spring

理解與回顧: 使用Spring IOC 管理對象(定義bean、bean的控制(scope/init-method等屬性))及對象關係(DI: set注入/構造器注入)。 控制反轉:改變了對象獲取方式。 new方式獲取 --> spring容器建立對象以後注入進來使用。下降了耦合。ui

###1. 組件自動掃描 指定包路徑,將包下全部組件進行掃描,組件類定義前有註解標記則會掃描到Spring容器。this

基於註解的組件掃描方式:spa

  1. 開啓組件掃描
spring.xml
...
<context:component-scan base-package="org.***" />
...
  1. 組件前添加註解
  • 掃描標記註解: @Component //其餘組件 @Controller //控制層 @Service //業務層組件 xxxService @Repository //數據訪問層組件 xxxDao
  • 對象管理註解: @Scope @PostConstruct @PreDestroy
  • 舉例:
@Component("idName")  //掃描ExampleBean 組件,默認id=exampleBean 
//@ComponentScan   // 註解方式開啓組件掃描
@Scope("singleton")  // 等價於<bean scope="">,默認單例。
public class ExampleBean {
    @PostConstruct //等價於<bean init-method="" >
    public void init() {
        System.out.println("初始化邏輯");
    }

    @PreDestroy // 等價於<bean destroy-method="" >  
    public void destroy() {
        System.out.println("釋放資源,釋放spring容器對象資源,觸發單例對象的destroy-method");
    }

    public void excute() {
        System.out.println("do sth");
    }
}

2. 組件依賴:爲bean添加註解,實現自動注入

  • @Resource:由JDK提供,能夠定義在變量前或者setXXX方法前。code

  • @Autowired:由Spring提供,能夠定義在變量前或者setXXX方法前。 兩者均可以實現注入,不存在多個匹配類型,使用Resource和Autowired均可以。 若是存在多個匹配類型,能夠按名稱注入: @Resource(name="指定名稱") 或 @Autowired @Qualifier("指定名稱")component

  • 舉例:xml

@Component
public class Student {
    //須要調用Computer和Phone對象
    @Autowired
    private Computer c; //注入Computer對象
    //使用註解set方法也可省略,xml的配置方式不能省略(set注入方式)
    //public void setC{
    //    this.c = c;
    //}
    @Autowired(required=false)  // 設置required屬性爲false,會嘗試自動注入,若沒有匹配的bean,則未注入,p仍爲null。
    //@Qualifier("p")  //指定名稱注入
    private Phone p;     //注入Phone對象
    ...
}
  • @Autowired或@Resource是對象的注入,簡單值能夠用@Value("#{id.key}")注入(表達式注入)。 舉例: xxx.properties
username=root
password=123456

spring.xml對象

<util:properties id="db"  location="classath:xxx.properties">
</util:properties>

3. Spring IOC應用小結

三種配置方案:1. xml中顯示配置; 2. java中顯示配置; 3. 組件掃描,自動注入。資源

本身寫的組件用簡潔的**註解方式自動注入(裝配)**便可; 第三方組件沒法在其類上添加@Component和@AutoWired註解,必須用XML或JavaConfig 顯式配置。 總之,以注入方式成全對象依賴關係,實現了組件解耦。

相關文章
相關標籤/搜索