Spring中的IoC.docx
- 文档编号:7470902
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:11
- 大小:17.90KB
Spring中的IoC.docx
《Spring中的IoC.docx》由会员分享,可在线阅读,更多相关《Spring中的IoC.docx(11页珍藏版)》请在冰豆网上搜索。
Spring中的IoC
Spring中的IoC(控制反转)容器初探收藏
IoC,翻译成中文有人叫控制反转,听起来很别别扭,其实就是依赖关系的转移,通过XML配置文件由容器来管理类,而不是在类中直接生成Bean的实例。
下面通过一个HelloWorld的实例来了解一下最基础的IoC
首先MyEclipse5.5新建一个Java工程,工程名上单击右键添加Spring容器能力。
我们先编写一个HelloWorld类
qiudawei115.base.HelloWorld.java
packageqiudawei115.base;
publicclassHelloWorld{
Stringmessage;
publicStringgetMessage(){
returnmessage;
}
publicvoidsetMessage(Stringmessage){
this.message=message;
}
}
注意这只是一个简单的Bean,没有任何其他东西。
在applicationContext.xml配置qiudawei115.base.HelloWorld(红色字体)
xmlversion="1.0"encoding="UTF-8"?
>
xmlns="http: //www.springframework.org/schema/beans" xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance" xsi: schemaLocation="http: //www.springframework.org/schema/beanshttp: //www.springframework.org/schema/beans/spring-beans-2.0.xsd"> ">
现在写一个测试类,检验一下qiudawei115.base.HelloWorldMain.java
packageqiudawei115.base;
importorg.springframework.beans.factory.BeanFactory;
importorg.springframework.beans.factory.xml.XmlBeanFactory;
importorg.springframework.core.io.ClassPathResource;
publicclassHelloWorldMain{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
//读取配置文件
ClassPathResourceresource=newClassPathResource("applicationContext.xml");
BeanFactorybeanFactory=newXmlBeanFactory(resource);
//获取HelloWorld实例
HelloWorldhelloWorld=(HelloWorld)beanFactory.getBean("helloWorld");
System.out.print(helloWorld.getMessage());
}
}
这样就完成了一个简单的IoC实例。
这里我们的Bean是由xml文件去管理的,我们索要做的就是从xml中获取这个类的实例。
依赖注入(DI)
IoC的重要功能之一就是进行Bean的管理,维护Bean之间的关联关系,这些工作是通过依赖注入(DI)来实现的(我对依赖注入有个解释就是根据Bean之间的依赖关系来实现向父Bean中注入子Bean,个人看法,不具权威,接受批评)。
依赖注入主要有两种方法,就是Constructor注入和Setter注入。
下面将分别介绍这两种注入。
Constructor注入通过带有参数的构造函数(构造器)实现,每个参数代表该对象的依赖Bean。
还是看一个简单的例子。
qiudawei115.constructor.FirstBean.java
packageqiudawei115.constructor;
publicclassFirstBean{
Stringmessage="IamFirstBean!
";
publicStringgetMessage(){
returnmessage;
}
publicvoidsetMessage(Stringmessage){
this.message=message;
}
@Override
publicStringtoString(){
//TODOAuto-generatedmethodstub
returnthis.message;
}
}
qiudawei115.constructor.SecondBean.java
packageqiudawei115.constructor;
publicclassSecondBean{
Stringmessage="IanSecondBean!
";
publicStringgetMessage(){
returnmessage;
}
publicvoidsetMessage(Stringmessage){
this.message=message;
}
@Override
publicStringtoString(){
//TODOAuto-generatedmethodstub
returnthis.message;
}
}
qiudawei115.constructor.ConstructorBean.java
packageqiudawei115.constructor;
publicclassConstructorBean{
FirstBeanfb;
SecondBeansb;
publicConstructorBean(FirstBeanfb,SecondBeansb){
super();
this.fb=fb;
this.sb=sb;
}
publicvoiddisplay(){
System.out.println("Constructor注入结果如下");
System.out.println(fb);
System.out.println(sb);
}
}
在applicationContext.xml增加对着三个类的管理(红色字体)
xmlversion="1.0"encoding="UTF-8"?
>
xmlns="http: //www.springframework.org/schema/beans" xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance" xsi: schemaLocation="http: //www.springframework.org/schema/beanshttp: //www.springframework.org/schema/beans/spring-beans-2.0.xsd"> ">
测试类:
qiudawei115.constructor.ConstructorMain.java
packageqiudawei115.constructor;
importorg.springframework.beans.factory.BeanFactory;
importorg.springframework.beans.factory.xml.XmlBeanFactory;
importorg.springframework.core.io.ClassPathResource;
publicclassConstructorMain{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
ClassPathResourceresource=newClassPathResource("applicationContext.xml");
BeanFactorybeanFactory=newXmlBeanFactory(resource);
ConstructorBeancb=(ConstructorBean)beanFactory.getBean("cb");
cb.display();
}
}
至此,我们就完成了一个Constructor注入的简单实例,是不是很简单!
下面看看Setter注入的实例,在Setter注入中,首先要利用空构造函数构造一个Bean,然后利用该Bean的Setter方法完成Bean的注入就OK了。
我们继续通过一个简单的例子来进行了解。
qiudawei115.setter.FirstBean.java
packageqiudawei115.setter;
publicclassFirstBean{
Stringmessage="IamFirstBean!
";
publicStringgetMessage(){
returnmessage;
}
publicvoidsetMessage(Stringmessage){
this.message=message;
}
@Override
publicStringtoString(){
//TODOAuto-generatedmethodstub
returnthis.message;
}
}
qiudawei115.setter.SecondBean.java
packageqiudawei115.setter;
publicclassSecondBean{
Stringmessage="IanSecondBean!
";
publicStringgetMessage(){
returnmessage;
}
publicvoidsetMessage(Stringmessage){
this.message=message;
}
@Override
publicStringtoString(){
//TODOAuto-generatedmethodstub
returnthis.message;
}
}
qiudawei115.setter.SetterBean
packageqiudawei115.setter;
publicclassSetterBean{
FirstBeansfb;
SecondBeanssb;
publicFirstBeangetSfb(){
returnsfb;
}
publicvoidsetSfb(FirstBeansfb){
this.sfb=sfb;
}
publicSecondBeangetSsb(){
returnssb;
}
publicvoidsetSsb(SecondBeanssb){
this.ssb=ssb;
}
publicSetterBean(){
super();
//TODOAuto-generatedconstructorstub
}
publicvoiddisplay(){
System.out.println("Setter注入结果如下");
System.out.println(sfb);
System.out.println(ssb);
}
}
配置文件applicationContext.xml
xmlversion="1.0"encoding="UTF-8"?
>
xmlns="http: //www.springframework.org/schema/beans" xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance" xsi: schemaLocation="http: //www.springframework.org/schema/beanshttp: //www.springframework.org/schema/beans/spring-beans-2.0.xsd"> --HelloWorld! --> "> --ConstructorDI--> --SetterDI-->
测试类
qiudawei115.setter.SetterBeanMain.java
packageqiudawei115.setter;
importorg.springframework.beans.factory.BeanFactory;
importorg.springframework.beans.factory.xml.XmlBeanFactory;
importorg.springframework.core.io.ClassPathResource;
importqiudawei115.constructor.ConstructorBean;
publicclassSetterBeanMain{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
ClassPathResourceresource=newClassPathResource("applicationContext.xml");
BeanFactorybeanFactory=newXmlBeanFactory(resource);
SetterBeansetterBean=(SetterBean)beanFactory.getBean("setterBean");
setterBean.display();
}
}
这样,我们也完成了Setter注入的实例。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Spring 中的 IoC