spring概念
簡單來說,spring就是一個用來放置對象和及其依賴關系的容器.
- IOC Inversion of Control 控制反轉. 指的是 對象的創(chuàng)建權反轉(交給)給 Spring.
作用是實現(xiàn)了程序的解耦合. - DI Dependency Injection 依賴注入.需要有 IOC 的環(huán)境,Spring 創(chuàng)建這個類的過程中,Spring 將類的依賴的屬性設置進去
- AOP 對程序進行增強:不修改源碼的情況下 可以進行權限校驗,日志記錄,性能監(jiān)控,事務控制 類似python中的裝飾器.
spring入門
- 創(chuàng)建 web 項目, 引入 Spring 的開發(fā)包
目前我們只要關注core,而不需要使用其他擴展
2.引入相關配置文件
在src目錄下新建applicationContext.xml文件
引入約束:spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html
<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">
</beans>
3.編寫相關的類
public interface UserDao {
public void sayHello();
}
public class UserDaoImpl implements UserDao {
@Override
public void sayHello() {
System.out.println("Hello Spring...");
}
}
4.完成配置
在applicationContext.xml中添加
<bean id="userDao" class="cn.itcast.spring.demo1.UserDaoImpl"></bean>
5.編寫測試程序
@Test
// Spring 的方式:
public void demo2(){
// 創(chuàng)建 Spring 的工廠類:
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("applicationContext.xml");
// 通過工廠解析 XML 獲取 Bean 的實例.
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
userDao.sayHello();
}
spring 工廠即容器
- ApplicationContext
- BeanFactory( 過時)
- BeanFactory 和 ApplicationContext 區(qū)別
BeanFactory :是在 getBean 的時候才會生成類的實例.
ApplicationContext :在加載 applicationContext.xml(容器啟動)時候就會創(chuàng)建.
Spring Bean的相關配置
- id和name標簽屬性的配置
id : 給Bean一個唯一ID,必須以字母開始酱讶,可以使用字母磕仅、數(shù)字哥艇、連字符沈堡、
下劃線员帮、句話丑念、冒號,不能出現(xiàn)特殊字符.
<bean id=”bookAction”>
name: 給Bean 起個名字,可以重復,可以出現(xiàn)特殊字符
- scope標簽屬性:Bean是否單例
- singleton :默認值偶垮,單例的.
- prototype :多例的.
- request :WEB 項目中,Spring 創(chuàng)建一個 Bean 的對象,將對象存入到 request 域中.
- session :WEB 項目中,Spring 創(chuàng)建一個 Bean 的對象,將對象存入到 session 域中.
- globalSession :WEB 項目中,應用在 Porlet 環(huán)境.如果沒有 Porlet 環(huán)境那么globalSession相當于 session.
- Bean的生命周期標簽屬性配置
通過配置<bean>標簽上的 init-method 作為 Bean 的初始化的時候執(zhí)行的方法,配置 destroy-method作為 Bean 的銷毀的時候執(zhí)行的方法鼎俘。
銷毀方法想要執(zhí)行,需要是單例創(chuàng)建的 Bean 而且在工廠關閉的時候辩涝,Bean 才會被銷毀.
- Spring生成Bean的三種方式(了解)
- 無參數(shù)的構造方法的方式
<!-- 方式一:無參數(shù)的構造方法的實例化 -->
<bean id="bean1" class="cn.itcast.spring.demo3.Bean1"></bean>
- 靜態(tài)工廠實例化的方式
public class Bean2Factory {
public static Bean2 getBean2(){
return new Bean2();
}
}
<!-- 方式二:靜態(tài)工廠實例化 Bean -->
<bean id="bean2" class="cn.itcast.spring.demo3.Bean2Factory"
factory-method="getBean2"/>
- 實例工廠實例化的方式
public class Bean3Factory {
public Bean3 getBean3(){
return new Bean3();
}
}
<bean id="bean3Factory" class="cn.itcast.spring.demo3.Bean3Factory"></bean>
<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>
- Spring Bean的屬性注入
- 構造方法的方式注入屬性
<!-- 第一種:構造方法的方式 -->
<bean id="car" class="cn.itcast.spring.demo4.Car">
<constructor-arg name="name" value=" 保時捷 "/>
<constructor-arg name="price" value="1000000"/>
</bean>
- set方法的方式注入屬性(掌握)
<!-- 第二種:set 方法的方式 -->
<bean id="car2" class="cn.itcast.spring.demo4.Car2">
<property name="name" value=" 奇瑞 QQ"/>
<property name="price" value="40000"/>
</bean>
- SpEL的方式的屬性注入(掌握 可以引用另一個類的屬性)
<!-- SpEL 的注入的方式 -->
<bean id="car2" class="cn.itcast.spring.demo4.Car2">
<property name="name" value="#{' 奔馳 '}"/>
<property name="price" value="#{800000}"/>
</bean>
<bean id="person" class="cn.itcast.spring.demo4.Person">
<property name="name" value="#{'冠希'}"/>
<property name="car2" value="#{car2}"/>
</bean>
<bean id="carInfo" class="cn.itcast.spring.demo4.CarInfo"></bean>
引用了另一個類的屬性
<bean id="car2" class="cn.itcast.spring.demo4.Car2">
<!-- <property name="name" value="#{'奔馳'}"/> -->
<property name="name" value="#{carInfo.carName}"/>
<property name="price" value="#{carInfo.calculatePrice()}"/>
</bean>
- 對象類型的注入
<!-- 注入對象類型的屬性 -->
<bean id="person" class="cn.itcast.spring.demo4.Person">
<property name="name" value=" 會希 "/>
<!-- ref 屬性:引用另一個 bean 的 id 或 name -->
<property name="car2" ref="car2"/>
</bean>
- 注入復雜類型
<!-- Spring 的復雜類型的注入===================== -->
<bean id="collectionBean" class="cn.itcast.spring.demo5.CollectionBean">
<!-- 數(shù)組類型的屬性 -->
<property name="arrs">
<list>
<value>會希</value>
<value>冠希</value>
<value>天一</value>
</list>
</property>
<!-- 注入 List 集合的數(shù)據(jù) -->
<property name="list">
<list>
<value>芙蓉</value>
<value>如花</value>
<value>鳳姐</value>
</list>
</property>
<!-- 注入 Map 集合 -->
<property name="map">
<map>
<entry key="aaa" value="111"/>
<entry key="bbb" value="222"/>
<entry key="ccc" value="333"/>
</map>
</property>
<!-- Properties 的注入 -->
<property name="properties">
<props>
<prop key="username">root</prop>
<prop key="password">123</prop>
</props>
</property>
</bean>
Spring的分配置文件的開發(fā)
在一個配置文件中包含另一個配置文件: <import resource="applicationContext2.xml"></import>