![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
![](/icons/24395de.gif)
![](/icons/24395de.gif)
![](/icons/24395yi.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395dou2.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
上面所说
![](/icons/24395de.gif)
![](/icons/24395yi.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395dou2.gif)
![](/icons/24395yi.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395yi.gif)
![](/icons/24395dou2.gif)
依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同
![](/icons/24395yi.gif)
![](/icons/24395dou2.gif)
![](/icons/24395yi.gif)
![](/icons/24395dou.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395yi.gif)
![](/icons/24395yi.gif)
![](/icons/24395dou.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395chengxu.gif)
![](/icons/24395dou.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
![](/icons/24395dou.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395de.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395dou.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395dou.gif)
![](/icons/24395dou2.gif)
不管是依赖注入
![](/icons/24395dou.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
![](/icons/24395dou.gif)
![](/icons/24395yi.gif)
![](/icons/24395dou.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395yi.gif)
![](/icons/24395dou.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395dou2.gif)
(1)原始社会里
![](/icons/24395dou.gif)
![](/icons/24395dou2.gif)
![](/icons/24395de.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395yi.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395dou2.gif)
![](/icons/24395de.gif)
![](/icons/24395chengxu.gif)
![](/icons/24395de.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395dou2.gif)
(2)进入工业社会
![](/icons/24395dou.gif)
![](/icons/24395dou2.gif)
![](/icons/24395dou.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395dou.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
![](/icons/24395chengxu.gif)
![](/icons/24395de.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
(3)进入“按需分配”社会
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395yi.gif)
![](/icons/24395dou2.gif)
![](/icons/24395dou2.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
第
![](/icons/24395yi.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395de.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
第 2种情况下
![](/icons/24395dou.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395dou2.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395dou.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395yi.gif)
![](/icons/24395dou2.gif)
第 3种情况下
![](/icons/24395dou.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395dou.gif)
![](/icons/24395chengxu.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395dou.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395dou2.gif)
![](/icons/24395dou.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
所谓依赖注入
![](/icons/24395dou.gif)
![](/icons/24395chengxu.gif)
![](/icons/24395dou.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395yi.gif)
![](/icons/24395dou.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
![](/icons/24395de.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
·设值注入
![](/icons/24395dou2.gif)
·构造注入
![](/icons/24395dou2.gif)
设值注入
设值注入是指通过
![](/icons/24395set.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
//定义Person接口
public
erface Person
{
//Person接口里定义
个使用斧子
思路方法
public void useAxe
;
}
然后是Axe![](/icons/24395de.gif)
//定义Axe接口
public
erface Axe
{
//Axe接口里有个砍
思路方法
public void chop
;
}
Person![](/icons/24395de.gif)
//Chinese实现Person接口
public
Chinese implements Person
{
//面向Axe接口编程
而不是具体
实现类
private Axe axe;
//默认
构造器
public Chinese![](/icons/24395kh.gif)
{}
//设值注入所需![](/icons/24395de.gif)
ter思路方法
public void
Axe(Axe axe)
{
this.axe = axe;
}
//实现Person接口
useAxe思路方法
public void useAxe![](/icons/24395kh.gif)
{
.out.pr
ln(axe.chop
);
}
}
Axe![](/icons/24395de.gif)
![](/icons/24395yi.gif)
//Axe
第
个实现类 StoneAxe
public
StoneAxe implements Axe
{
//默认构造器
public StoneAxe![](/icons/24395kh.gif)
{}
//实现Axe接口
chop思路方法
public String chop![](/icons/24395kh.gif)
{
"石斧砍柴好慢";
}
}
下面采用Spring![](/icons/24395de.gif)
![](/icons/24395yi.gif)
![](/icons/24395dou2.gif)
<!-- 下面是标准
XML文件头 -->
<?xml version="1.0" encoding="gb2312"?>
<!-- 下面
行定义Spring
XML配置文件
dtd -->
"http://www.springframework.org/dtd/spring-beans.dtd">
<!-- 以上 3行对所有
Spring配置文件都是相同
-->
<!-- Spring配置文件
根元素 -->
<BEANS>
<!—定义第
bean
该bean
id是chinese,
指定该bean例子
实现类 -->
<BEAN
=lee.Chinese id=chinese>
<!-- property元素用来指定需要容器注入
属性
axe属性需要容器注入此处是设值注入
因此Chinese类必须拥有
Axe思路方法 -->
<property name="axe">
<!-- 此处将另
个bean
引用注入给chinese bean -->
<REF local="”stoneAxe”/">
</property>
</BEAN>
<!-- 定义stoneAxe bean -->
<BEAN
=lee.StoneAxe id=stoneAxe />
</BEANS>
从配置文件中![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395dou2.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395dou2.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395de.gif)
![](/icons/24395class.gif)
![](/icons/24395dou.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
Spring会自动接管每个bean定义里
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
![](/icons/24395de.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395de.gif)
![](/icons/24395set.gif)
![](/icons/24395chengxu.gif)
![](/icons/24395dou2.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
每个bean
![](/icons/24395de.gif)
![](/icons/24395de.gif)
![](/icons/24395yi.gif)
![](/icons/24395dou.gif)
![](/icons/24395chengxu.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
下面看主
![](/icons/24395chengxu.gif)
public
BeanTest
{
//主思路方法![](/icons/24395dou.gif)
![](/icons/24395chengxu.gif)
入口
public
void
(String
args)throws Exception
{
//
是独立
应用![](/icons/24395chengxu.gif)
显式地例子化Spring
上下文![](/icons/24395dou2.gif)
ApplicationContext ctx =
File
XmlApplicationContext("bean.xml");
//通过Person bean
id来获取bean例子
面向接口编程
因此
//此处强制类型转换为接口类型
Person p = (Person)ctx.getBean("chinese");
//直接执行Person
userAxe
思路方法![](/icons/24395dou2.gif)
p.useAxe
;
}
}
![](/icons/24395chengxu.gif)
![](/icons/24395de.gif)
石斧砍柴好慢
主
![](/icons/24395chengxu.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395de.gif)
![](/icons/24395kh.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395chengxu.gif)
![](/icons/24395de.gif)
![](/icons/24395yi.gif)
![](/icons/24395dou2.gif)
![](/icons/24395dou.gif)
![](/icons/24395chengxu.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395dou2.gif)
Person例子不仅不需要了解Axe例子
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
![](/icons/24395chengxu.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395dou2.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395dou.gif)
![](/icons/24395dou2.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395dou2.gif)
![](/icons/24395de.gif)
<?xml version="1.0"?>
<!-- 定义编译该项目
基本信息-->
<PROJECT name="spring" default="." basedir=".">
<!-- 定义编译和运行该项目时所需
库文件 -->
<PATH id=
path>
<!-- 该路径下存放spring.jar和其他第 3方类库 -->
<FILESET dir=....lib>
<INCLUDE name="*.jar" />
</FILESET>
<!-- 同时还需要引用已经编译过![](/icons/24395de.gif)
文件-->
<PATHELEMENT path="." />
</PATH>
<!-- 编译全部
java文件-->
<TARGET description="Compile all source code" name="compile">
<!-- 指定编译后![](/icons/24395de.gif)
文件
存放位置 -->
<JAVAC debug="true" destdir=".">
deprecation="false" optimize="false" failonerror="true">
<!-- 指定需要编译
源文件
存放位置 -->
<SRC path="." />
<!-- 指定编译这些java文件需要
类库位置-->
<CLASSPATH refid="
path" />
</JAVAC>
</TARGET>
<!-- 运行特定
主
-->
<TARGET description="run the
" name="run" depends="compile">
<!-- 指定运行
主
:lee.BeanTest
-->
<JAVA failonerror="true" fork="yes"
name="lee.BeanTest">
<!-- 指定运行这些java文件需要
类库位置-->
<CLASSPATH refid="
path" />
</JAVA>
</TARGET>
</PROJECT>
如果需要改写Axe![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
![](/icons/24395dou.gif)
![](/icons/24395yi.gif)
![](/icons/24395dou2.gif)
![](/icons/24395dou2.gif)
![](/icons/24395yi.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
Axe
![](/icons/24395de.gif)
![](/icons/24395yi.gif)
//Axe
另
个实现类 SteelAxe
public
SteelAxe implements Axe
{
//默认构造器
public SteelAxe![](/icons/24395kh.gif)
{}
//实现Axe接口
chop思路方法
public String chop![](/icons/24395kh.gif)
{
"钢斧砍柴真快";
}
}
然后![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395yi.gif)
<!-- 定义
个steelAxe bean-->
<BEAN
=lee.SteelAxe id=steelAxe />
该行重新定义了![](/icons/24395yi.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
<REF local="”stoneAxe”/">
改成<REF local="”steelAxe”/">
此时再次执行![](/icons/24395chengxu.gif)
![](/icons/24395dou.gif)
钢斧砍柴真快
Person和Axe的间没有任何代码耦合关系
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
![](/icons/24395set.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395dou2.gif)
业务对象
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395dou2.gif)
构造注入
所谓构造注入
![](/icons/24395dou.gif)
![](/icons/24395hanshu.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395set.gif)
![](/icons/24395dou2.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
//Chinese实现Person接口
public
Chinese implements Person
{
//面向Axe接口编程
而不是具体
实现类
private Axe axe;
//默认
构造器
public Chinese![](/icons/24395kh.gif)
{}
//构造注入所需
带参数
构造器
public Chinse(Axe axe)
{
this.axe = axe;
}
//实现Person接口
useAxe思路方法
public void useAxe![](/icons/24395kh.gif)
{
.out.pr
ln(axe.chop
);
}
}
此时无须Chinese类里![](/icons/24395de.gif)
![](/icons/24395set.gif)
![](/icons/24395dou.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
![](/icons/24395de.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
<!-- 下面是标准
XML文件头 -->
<xml version="1.0" encoding="gb2312"?>
<!-- 下面
行定义Spring
XML配置文件
dtd -->
"http://www.springframework.org/dtd/spring-beans.dtd">
<!-- 以上 3行对所有
Spring配置文件都是相同
-->
<!-- Spring配置文件
根元素 -->
<BEANS>
<!—定义第
个bean
该bean
id是chinese,
指定该bean例子
实现类 -->
<BEAN
=lee.Chinese id=chinese>
</BEAN>
<!-- 定义stoneAxe bean -->
<BEAN
=lee.SteelAxe id=steelAxe />
</BEANS>
执行效果和使用steelAxe设值注入时![](/icons/24395de.gif)
![](/icons/24395yi.gif)
![](/icons/24395dou2.gif)
![](/icons/24395de.gif)
![](/icons/24395yi.gif)
![](/icons/24395de.gif)
![](/icons/24395dou.gif)
![](/icons/24395diaoyong.gif)
![](/icons/24395de.gif)
![](/icons/24395dou2.gif)
![](/icons/24395dou.gif)
![](/icons/24395de.gif)
最新评论