Spring 框架
Spring 是一個開源框架,是為了解決企業應用程序開發復雜性而創建的。框架的主要優勢之一就是其分層架構,分層架構允許您選擇使用哪一個組件,同時為 J2EE 應用程序開發提供集成的框架。
Spring框架由七個模塊組成:核心容器、應用上下文(Context)模塊、Spring的AOP模塊、JDBC抽象和DAO模塊、對象/關系映射集成模塊、Spring的Web模塊、Spring的MVC框架。
結構圖
代碼結構
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即使用自動裝配依賴,又使用ref顯示依賴時,則顯示指定的依賴就會覆蓋自動裝配。
bean中其他配置
在bean 除了基本的配置類型以為,可能還存在其他類型 list set
map properties ,如果使用了這里類型,只需要在propert中 進行相應的配置,即可。