Spring in Action这本书可以说是非常好的一本讲解Spring框架的好书,现在出版了第三版,包含了Spring3.0的许多
新特性,特此拿来好好系统的学习一番,以前对Spring有所了解,但是不是非常的详细,现在打算好好的认真的研究一
下Spring,先从最基础的开始吧。
1.Declaring a simple bean
这里声明了一个非常简单的Bean然后使用Spring的依赖注入技术实现对他的调用。
package com.bird.springidol;
/**
* declaring a simple bean
* @author Bird
*
*/
public class Juggler {
private int beanBags = 3;
public Juggler(){
}
public Juggler(int beanBags){
this.beanBags=beanBags;
}
public void perform(){
System.out.println("Juggling "+beanBags+" BEANBAGS");
}
}
只需要在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-3.0.xsd" >
<bean id="duke" class="com.bird.springidol.Juggler"></bean>
然后使用Junti测试框架进行测试
/**
* declaring a simple bean
*/
@Test
public void test1(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
Juggler ju = (Juggler) ctx.getBean("duke");
ju.perform();
}
2.injecting through constructors
通过构造函数传入参数的注入方式
还是刚才的那个代码,这里使用了不同的配置方式
<bean id="duke1" class="com.bird.springidol.Juggler">
<constructor-arg value="15"></constructor-arg>
</bean>
测试代码如下
/**
* Injecting through constructors
*/
@Test
public void test2(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
Juggler ju = (Juggler) ctx.getBean("duke1");
ju.perform();
}
3.injecting object references with constructors
通过构造函数传入对象
package com.bird.springidol;
/**
* injecting object references with constructors
* @author Administrator
*
*/
public class Poeticjuggler extends Juggler {
private Poem poem;//倚赖注入的
public Poeticjuggler(Poem poem){
super();
this.poem=poem;
}
public Poeticjuggler(int beanBags, Poem poem){
super(beanBags);
this.poem=poem;
}
public void perform(){
super.perform();
System.out.println("whing reciting.....");
poem.recite();
}
}
package com.bird.springidol;
public class Sonnect29 implements Poem {
@Override
public void recite() {
System.out.println("this is a poem that too long");
}
}
配置方式如下
<bean id="sonnet29" class="com.bird.springidol.Sonnect29"></bean>
<bean id="poeticDuke" class="com.bird.springidol.Poeticjuggler">
<constructor-arg value="15"></constructor-arg>
<constructor-arg ref="sonnet29"></constructor-arg>
</bean>
4.creating beans through factory methods
很多类使用单例设计模式,这样的对象只能通过静态方法生成一个对象,这里说一下如何注入这些对象
package com.bird.springidol;
/**
* creating beans through factory methods
* @author Administrator
*
*/
public class Staage {
private Staage(){}
private static class StageSingletonHolder{
static Staage instance = new Staage();
}
public static Staage getInstance(){
return StageSingletonHolder.instance;
}
}
<bean id="theStage" class="com.bird.springidol.Staage" factory-method="getInstance"></bean>
5.initializing and destorying beans
在创建和删除Bean的时候调用的代码
只需要这样配置
<bean id="test1" class="" init-method="" destroy-method=""></bean>
6.injecting into bean properties
注入对象的属性
package com.bird.springidol;
/**
* injecting into bean properties
*
* @author Administrator
*
*/
public class Instrumentalist {
private String song;
private Instrument instrument;
public String getSong() {
return song;
}
public void setSong(String song) {
this.song = song;
}
public Instrument getInstrument() {
return instrument;
}
public void setInstrument(Instrument instrument) {
this.instrument = instrument;
}
public Instrumentalist(){}
public void perform(){
System.out.println("playing"+song+":");
instrument.play();
}
}
package com.bird.springidol;
public class Saxophone implements Instrument {
public Saxophone(){}
@Override
public void play() {
System.out.println("TOOT TOOT TOOT");
}
}
配置如下
<bean id="saxophone" class="com.bird.springidol.Saxophone"></bean>
<bean id="kenny" class="com.bird.springidol.Instrumentalist">
<property name="song" value="Jingle Bells"></property>
<property name="instrument" ref="saxophone"></property>
</bean>