一、装配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>