分享

spring注入方式详解

 残妆殇殇 2012-11-21
spring注入方式详解 (2010-01-10 19:10)
分类: java


一、使用setter方式完成依赖注入
下面是Bean和beans-config.xml文件。
public class HelloBean {

private
String helloWord;



//...省略getter、setter方法

}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www./dtd/spring-beans.dtd">
<beans>

<bean
id="helloBean"

class="onlyfun.caterpillar.HelloBean">

<property
name="helloWord">

<value>
Hello!Justin!</value>

</property>

</bean>

</beans>
public class SpringDemo {
public
static
void
main(String[] args) {
Resource rs = new
FileSystemResource("beans-config.xml"
);
BeanFactory factory = new
XmlBeanFactory(rs);

HelloBean hello = (HelloBean) factory.getBean("helloBean"
);
System.out.println(hello.getHelloWord());
}
}
二、使用constructor方式完成注入
public class HelloBean {
private
String name;
private
String helloWord;

// 建议有要无参数建构方法
public
HelloBean() {
}

public
HelloBean(String name, String helloWord) {
this
.name = name;
this
.helloWord = helloWord;
}

//...省略getter、setter方法
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www./dtd/spring-beans.dtd">
<beans>

<bean
id="helloBean"

class="onlyfun.caterpillar.HelloBean">

<constructor-arg
index="0">

<value>
Justin</value>

</constructor-arg>

<constructor-arg
index="1">

<value>
Hello</value>

</constructor-arg>

</bean>

</beans>
public class SpringDemo {
public
static
void
main(String[] args) {
ApplicationContext context =
new
FileSystemXmlApplicationContext("beans-config.xml"
);

HelloBean hello = (HelloBean) context.getBean("helloBean"
);
System.out.print("Name: "
);
System.out.println(hello.getName());
System.out.print("Word: "
);
System.out.println(hello.getHelloWord());
}
}
三、属性参考
public class HelloBean {
private
String helloWord;
private
Date date;

//...省略getter、setter方法
}
<beans>
<bean
id="dateBean"
class="java.util.Date"/>

<bean
id="helloBean"
class="onlyfun.caterpillar.HelloBean">

<property
name="helloWord">

<value>
Hello!</value>

</property>

<property
name="date">

<ref
bean="dateBean"/>

</property>

</bean>

</beans>
public class SpringDemo {
public
static
void
main(String[] args) {
ApplicationContext context =
new
FileSystemXmlApplicationContext("beans-config.xml"
);

HelloBean hello = (HelloBean) context.getBean("helloBean"
);
System.out.print(hello.getHelloWord());
System.out.print(" It's "
);
System.out.print(hello.getDate());
System.out.println("."
);
}
}
四、“byType”自动绑定
将“三”中的配置文件改为下面,即可完成bean属性的按类型自动绑定。
<beans>
<bean
id="dateBean"
class="java.util.Date"/>

<bean
id="helloBean"
class="onlyfun.caterpillar.HelloBean"
autowire="byType">

<property
name="helloWord">

<value>
Hello!</value>

</property>

</bean>

</beans>
五、“byName”自动绑定
将“三”中的配置文件改为下面,即可完成bean属性的按名称自动绑定。
<beans>
<bean
id="dateBean"
class="java.util.Date"/>

<bean
id="helloBean"
class="onlyfun.caterpillar.HelloBean"
autowire="byName">

<property
name="helloWord">

<value>
Hello!</value>

</property>

</bean>

</beans>
六、“constructor”自动绑定
将“三”中的配置文件改为下面,即可完成bean属性的按构造方法自动绑定。在建立依赖关系时,Srping容器会试图比对容器中的Bean实例类型,及相关的构造方法上的参数类型,看看在类型上是否符合,如果有的话,则选用该构造方法来建立Bean实例。如果无法绑定,则抛出org.springframework.beans.factory.UnsatisfiedDependencyException异常。
<beans>
<bean
id="dateBean"
class="java.util.Date"/>

<bean
id="helloBean"
class="onlyfun.caterpillar.HelloBean"
autowire="constructor">

<property
name="helloWord">

<value>
Hello!</value>

</property>

</bean>

</beans>
六、“autodetect”自动绑定
将“三”中的配置文件改为下面,即可完成bean属性的自动绑定,这个自动绑定是Spring会尝试用入constructor来处理依赖关系的建立,如果不行,则再尝试用byType类建立依赖关系。
<beans>
<bean
id="dateBean"
class="java.util.Date"/>

<bean
id="helloBean"
class="onlyfun.caterpillar.HelloBean"
autowire="autodetect">

<property
name="helloWord">

<value>
Hello!</value>

</property>

</bean>

</beans>
七、依赖检查方式
在自动绑定中,由于没办法从定义文件中,清楚地看到是否每个属性都完成设定,为了确定某些依赖关系确实建立,您可以假如依赖检查,在<bean>标签使用时设定"dependency-check",可以有四种依赖检查方式:simple、objects、all、none。
simple:只检查简单的类型(像原生数据类型或字符串对象)属性是否完成依赖关系,。
objects:检查对象类型的属性是否完成依赖关系。
all:则检查全部的属性是否完成依赖关系。
none:设定是默认值,表示不检查依赖性。
<beans>
<bean
id="dateBean"
class="java.util.Date"/>

<bean
id="helloBean"
class="onlyfun.caterpillar.HelloBean"
autowire="autodetect"
dependeny-check="all">

<property
name="helloWord">

<value>
Hello!</value>

</property>

</bean>

</beans>
八、集合对象注入
对于像数组、List、Set、Map等集合对象,在注入前必须填充一些对象至集合中,然后再将集合对象注入至所需的Bean时,也可以交由Spring的IoC容器来自动维护或生成集合对象,并完成依赖注入。
public class SomeBean {
private
String[] someStrArray;
private
Some[] someObjArray;
private
List someList;
private
Map someMap;

public
String[] getSomeStrArray() {
return
someStrArray;
}
public
void
setSomeStrArray(String[] someStrArray) {
this
.someStrArray = someStrArray;
}
public
Some[] getSomeObjArray() {
return
someObjArray;
}
public
void
setSomeObjArray(Some[] someObjArray) {
this
.someObjArray = someObjArray;
}
public
List getSomeList() {
return
someList;
}
public
void
setSomeList(List someList) {
this
.someList = someList;
}
public
Map getSomeMap() {
return
someMap;
}
public
void
setSomeMap(Map someMap) {
this
.someMap = someMap;
}
}
public class Some {
private
String name;

public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name = name;
}
public
String toString() {
return
name;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www./dtd/spring-beans.dtd">

<beans>

<bean
id="some1"
class="onlyfun.caterpillar.Some">

<property
name="name">

<value>
Justin</value>

</property>

</bean>


<bean
id="some2"
class="onlyfun.caterpillar.Some">

<property
name="name">

<value>
momor</value>

</property>

</bean>


<bean
id="someBean"
class="onlyfun.caterpillar.SomeBean">

<property
name="someStrArray">

<list>

<value>
Hello</value>

<value>
Welcome</value>

</list>

</property>


<property
name="someObjArray">

<list>

<ref
bean="some1"/>

<ref
bean="some2"/>

</list>

</property>


<property
name="someList">

<list>

<value>
ListTest</value>

<ref
bean="some1"/>

<ref
bean="some2"/>

</list>

</property>


<property
name="someMap">

<map>

<entry
key="MapTest">

<value>
Hello!Justin!</value>

</entry>

<entry
key="someKey1">

<ref
bean="some1"/>

</entry>

</map>

</property>

</bean>

</beans>
public class SpringDemo {
public
static
void
main(String[] args) {
ApplicationContext context =
new
FileSystemXmlApplicationContext(
"beans-config.xml"
);

SomeBean someBean =
(SomeBean) context.getBean("someBean"
);

// 取得数组型态依赖注入对象
String[] strs =
(String[]) someBean.getSomeStrArray();
Some[] somes =
(Some[]) someBean.getSomeObjArray();
for
(int
i = 0; i < strs.length; i++) {
System.out.println(strs[i] + ","

+ somes[i].getName());
}

// 取得List型态依赖注入对象
System.out.println();
List someList = (List) someBean.getSomeList();
for
(int
i = 0; i < someList.size(); i++) {
System.out.println(someList.get(i));
}

// 取得Map型态依赖注入对象
System.out.println();
Map someMap = (Map) someBean.getSomeMap();
System.out.println(someMap.get("MapTest"
));
System.out.println(someMap.get("someKey1"
));
}
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多