Spring解析

Spring 框架

Spring 是一個開源框架,是為了解決企業應用程序開發復雜性而創建的。框架的主要優勢之一就是其分層架構,分層架構允許您選擇使用哪一個組件,同時為 J2EE 應用程序開發提供集成的框架。
Spring框架由七個模塊組成:核心容器、應用上下文(Context)模塊、Spring的AOP模塊、JDBC抽象和DAO模塊、對象/關系映射集成模塊、Spring的Web模塊、Spring的MVC框架。


結構圖

Paste_Image.png


代碼結構

package basedao;

public interface IDao {
    
    public abstract String queryId();

}

package basedao.impl;

import basedao.IDao;

public class IDaoImpl implements IDao{

    @Override
    public String queryId() {
        return "查詢成功";
    }
    
}
package services;

public interface iService {
    void selectDao();
}

package services;

import basedao.IDao;

public class servicesimpl implements iService{
//這里是通過 by name來進行設置的
    private IDao idao;
    public void setIdao(IDao idao) {
        this.idao = idao;
    }
    @Override
    public void selectDao() {
        System.out.println(idao.queryId());
    }

}

package test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import services.iService;

public class Main {
    @SuppressWarnings("resource")
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
        iService bean = context.getBean("jdk", iService.class);
        bean.selectDao();
        
    }

}


xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="jdk" class="services.servicesimpl" autowire="byName"> <property name="idao" ref="IDaoImpl"></property></bean>
    <bean id="IDaoImpl" class="basedao.impl.IDaoImpl"></bean>
</beans>

要點解析

  • Spring支持自動裝配Bean與Bean之間的依賴關系,也就是說我們無需顯示的指定依賴Bean。由BeanFactory檢查XML配置文件內容,根據某種規則,為主調Bean注入依賴關系。
    Spring的自動裝配機制可以通過<bean.../>元素的default-autowire屬性指定,也可以通過<bean.../>元素的autowire屬性指定。
    - 自動裝配可以減少配置文件的工作量,但是它降低了依賴關系的透明性和清晰性,所以一般來說在較大部署環境中不推薦使用,顯示配置合作者能夠得到更加清晰的依賴關系。Spring提供了如下幾種規則來實現自動裝配。
    no:不適用自動裝配。Bean依賴必須通過ref元素定義。
    - byName:根據屬性名自動裝配。BeanFactory查找容器中的全部Bean,找出其中id屬性與屬性同名的Bean來完成注入。如果沒有找到匹配的Bean實例,則Spring不會進行任何注入。
    - byType:根據屬性類型自動裝配。BeanFactory查找容器中的全部Bean,如果正好有一個與依賴屬性類型相同的Bean,就自動注入這個屬性;但是如果有多個這樣的Bean,就會拋出一個異常。如果沒有匹配的Bean,則什么都不會發生,屬性就不會被設置。如果需要無法自動裝配時拋出異常,則設置dependency-check=”objects”。
    - constructor:與不Type類似,區別是用于構造注入的參數。
    Autodetect:BeanFactory根據Bean內部結構,決定使用constructor或者byType。如果找到一個默認的構造函數,則使用byTe。

    - byName規則
      byTyep規則是指通過名字注入依賴關系,假如Bean A的實現類里面包含setB()方法,而Spring的配置文件恰好包含一個id為b的Bean,則Spring容器就會將b實例注入Bean A中。如果容器中沒有名字匹配的Bean,Spring則不會做任何事情。
    
    • 當一個Bean即使用自動裝配依賴,又使用ref顯示依賴時,則顯示指定的依賴就會覆蓋自動裝配。
      在默認的情況下,Spring會自動搜索容器中的全部Bean,并對這些Bean進行判斷,判斷他們是否滿足自動裝配的條件,如果滿足就會將該Bean注入目標Bean實例中。如果我們不想讓Spring搜索容器中的全部Bean,也就是說,我們需要Spring來判斷哪些Bean需要搜索,哪些Bean不需要搜索,這個時候就需要用到autowire-candidate屬性。通過為<bean.../>元素設置autowire-candidate=”false”,即可將該Bean限制在自動裝配范圍之外,容器在查找自動裝配對象時將不考慮該Bean。

bean中其他配置
在bean 除了基本的配置類型以為,可能還存在其他類型 list set
map properties ,如果使用了這里類型,只需要在propert中 進行相應的配置,即可。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容