一、裝配wiring,即建立應用對象之間的協做關係的行爲,者也是依賴注入的本質。
二、建立Spring配置
從Sring3.0開始,Spring容器提供了兩種配置Bean的方式:
XML文件配置方式
基於Java註解的配置方式
三、典型的xml配置文件:
java
beans命名空間不是惟一的Spring命名空間,Spring核心框架自帶了10個命名空間配置,以下:
spring
四、當Spring容器加載Bean時,Spring使用反射來建立Bean。框架
五、覆蓋Spring默認的單例配置:Spring Bean默認都是單例,但有時咱們每次都須要得到惟一的Bean實例,好比每一個人的門票要惟一:
咱們只須要配置Bean的scope屬性爲prototype便可:less
<bean id="ticket" class="com....Ticket" scope="prototype" />
Spring提供的做用域選項:
測試
六、初始化和銷燬Bean
Auditorium(舞臺)要保證作的最早和最後兩件事情:
開燈,關燈。
this
須要在Bean中使用init-method和destory-method屬性:
prototype
當有不少上下文定義的Bean有相同名字的初始化方法和銷燬方法時,能夠直接在上層beans元素中聲明default-init-method和default-destory-method屬性,從而避免每個都要設置一遍的問題。3d
示例:
一、程序結構:code
二、簡單的Spring裝配orm
Performer.java接口
//<start id="performer_java" /> package com.springinaction.springidol; public interface Performer { void perform() throws PerformanceException; } //<end id="performer_java" />
Juggler.java實現類
//<start id="juggler_java" /> package com.springinaction.springidol; public class Juggler implements Performer { private int beanBags = 3; public Juggler() { } public Juggler(int beanBags) { this.beanBags = beanBags; } public void perform() throws PerformanceException { System.out.println("JUGGLING " + beanBags + " BEANBAGS"); } } //<end id="juggler_java" />
spring-idol.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" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> <bean id="duke" class="com.springinaction.springidol.Juggler" /> </beans>
JugglerTest.java測試類
package com.springinaction.springidol; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Created by LTN on 2016/4/17. */ public class JugglerTest { public static void main(String[] args) throws Exception{ ApplicationContext context =new ClassPathXmlApplicationContext("com/springinaction/springidol/spring-idol.xml"); Performer performer = (Performer) context.getBean("duke"); // Performer performer = (Performer) context.getBean("poeticDuke"); performer.perform(); } }
三、有參數的裝配過程
PoeticJuggler.java
其構造器須要一個int和Poem的參數
//<start id="poeticjuggler_java" /> package com.springinaction.springidol; public class PoeticJuggler extends Juggler { private Poem poem; public PoeticJuggler(Poem poem) { //<co id="co_injectPoem"/> super(); this.poem = poem; } public PoeticJuggler(int beanBags, Poem poem) { // <co id="co_injectPoemBeanBags"/> super(beanBags); this.poem = poem; } public void perform() throws PerformanceException { super.perform(); System.out.println("While reciting..."); poem.recite(); } } //<end id="poeticjuggler_java" />
參數在xml文件中,須要如下配置:
<constructor-arg value="15" /> <constructor-arg ref="sonnet29" />
value能夠指定基本類型;
ref是引用其餘的bean定義。
Poem.java接口
//<start id="poem_java" /> package com.springinaction.springidol; public interface Poem { void recite(); } //<end id="poem_java" />
Sonnet29.java實現類
//<start id="sonnet29_java" /> package com.springinaction.springidol; public class Sonnet29 implements Poem { private static String[] LINES = { "When, in disgrace with fortune and men's eyes,", "I all alone beweep my outcast state", "And trouble deaf heaven with my bootless cries", "And look upon myself and curse my fate,", "Wishing me like to one more rich in hope,", "Featured like him, like him with friends possess'd,", "Desiring this man's art and that man's scope,", "With what I most enjoy contented least;", "Yet in these thoughts myself almost despising,", "Haply I think on thee, and then my state,", "Like to the lark at break of day arising", "From sullen earth, sings hymns at heaven's gate;", "For thy sweet love remember'd such wealth brings", "That then I scorn to change my state with kings." }; public Sonnet29() { } public void recite() { for (int i = 0; i < LINES.length; i++) { System.out.println(LINES[i]); } } } //<end id="sonnet29_java" />
spring-idol.java配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> <!--<start id="duke_bean" />--> <bean id="duke" class="com.springinaction.springidol.Juggler" /> <!--<end id="duke_bean" />--> <!--<start id="poeticduke_bean" />--> <bean id="poeticDuke" class="com.springinaction.springidol.PoeticJuggler"> <constructor-arg value="15" /> <constructor-arg ref="sonnet29" /> </bean> <!--<end id="poeticduke_bean" />--> <!--<start id="sonnet29_bean" />--> <bean id="sonnet29" class="com.springinaction.springidol.Sonnet29" /> <!--<end id="sonnet29_bean" />--> </beans>