当我们对一个javaBean进行实例化时,在原本的情况下我们会选择新建一个接口,然后进行实例化,为了进一步降低耦合度我们还会使用工厂模式进行封装。

例:

当我们想要去造,Chinese、American 时,我们会先去建造接口Human 在用Chinese American  来实现Human接口,同时建立HumanFactoy  在需要对象时 我们可以通过调用HumanFactory 来完成。

简单点来说我们可以这样去实现:

 public    Human getHuman(String human){
if (human.equals("Chinese")) {
return new Chinese();
}else if (human.equals("American")) {
return new American()
} }

之后 我们的  Human  应该可以  speak()   ,所以我们的Chinese和American相应的也应该具有属性  Language  .

接下来理所应当的去构建    getter/setter()     方法  或者  在构造方法里加入 this.language =  language    然后在使用时手动调用相应的方法进行初始化。

在这里Spring 给我们提供了另外一种创建对象的方法。

例:

我们用  spring  的相关配置代替了HumanFactory 来创建对象, 并且我们无需调用Human的相关方法, 只需要在相关文件进行配置,将Human跟Language之间的关系交又外部文件来完成,而不是去调用Human的方法,手动去初始化 Language。

javaBean 不变。

 public interface Human {
public void speak();
}
 import com.language.Language;
public class Chinese implements Human{
private Language lan1;
private Language lan2;
@Override
public void speak() {
System.out.println("中国人说:"+lan1.kind());
System.out.println("中国人也说:"+ lan2.kind());
} public void setLan1(Language lan1) {
this.lan1 = lan1;
} public void setLan2(Language lan2) {
this.lan2 = lan2;
}
}
 public interface Language {
public String kind();
}
 public class English implements Language{

     @Override
public String kind() {
return "英语";
} }
 public class Chinese implements Language{
@Override
public String kind() {
return "中文";
}
}

在我们导入相关spring组件时会在src下自动创建     applicationContext.xml  我们在此做相关部署,将中国人跟中文、英文分别配置,并且设置 lan1为 中文 lan2 为 英文。

如下:

 <?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<!-- 注入chinese对象 -->
<bean id="Chinese" class="com.human.Chinese">
<!-- property 元素用来指定需要容器注入的属性,lan属性需要容器注入 -->
<property name="lan1" ref="chinese"></property>
<property name="lan2" ref="english"></property>
</bean>
<!-- 注入English对象 -->
<bean id="english" class="com.language.English"></bean>
<!-- 注入chinese对象 -->
<bean id="chinese" class="com.language.Chinese"></bean>
</beans>

测试代码如下:

 public class Test {
public static void main(String[] args) { ApplicationContext ctx = new FileSystemXmlApplicationContext("/src/applicationContext.xml");
Human human = null;
human = (Human)ctx.getBean("Chinese");//依赖注入获取"chinese"
human.speak();
}
}

运行结果:

中国人说:中文
中国人也说:英语

以上所使用的方法为设置注入,在xml文件中设置好了属性值。(主要使用方法)

利用构造函数来设置依赖注入的方式为,构造注入,,这种方法在构造实例时,就已经为其完成属性的初始化。

如次只需要对前面的Chinesse进行修改,不再需要属性的setter()方法。而改为初始化属性的构造函数

 public Chinese(Language lan1, Language lan2) {
super();
this.lan1 = lan1;
this.lan2 = lan2;
}

配置文件也做简单修改:

 <?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> <bean id="Chinese" class="com.human.Chinese">
<!-- property 元素用来指定需要容器注入的属性,lan属性需要容器注入 -->
<constructor-arg ref="chinese"></constructor-arg>
<constructor-arg ref="english"></constructor-arg>
</bean> <!-- 注入English对象 -->
<bean id="english" class="com.language.English"></bean>
<!-- 注入chinese对象 -->
<bean id="chinese" class="com.language.Chinese"></bean>
</beans>

最新文章

  1. shiro-简介
  2. LTP随笔——本地调用ltp之ltp4j
  3. js操作数组
  4. Java加密技术(一)——BASE64与单向加密算法MD5&amp;SHA&amp;MAC
  5. du: fts_read 失败: 无法分配内存
  6. 用vs2008打开vs2012项目
  7. [Issue]repo/repo init-解决同步源码Cannot get http://gerrit.googlesource.com/git-repo/clone.bundle
  8. java基础知识回顾之---java StringBuilder与StringBuffer异同点
  9. Nginx的介绍和使用
  10. Web资源文件的加载
  11. Android项目实战--手机卫士20--拿到已经安装了的程序以及程序管理主界面
  12. SQL语句函数详解__sql聚合函数
  13. 简单字符串处理 hdu2532 Engine
  14. selenium webdriver学习-怎么等待页面元素加载完成
  15. HDU1548:A strange lift(Dijkstra或BFS)
  16. VisualStudio2017下ASP.NET CORE的TagHelper智能提示解决办法
  17. SQL Server从远程服务器导入数据
  18. 带着问题写React Native原生控件--Android视频直播控件
  19. git(一)快速入门
  20. ●BOZJ 2229 [Zjoi2011]最小割

热门文章

  1. Linux环境搭建SVN服务
  2. js 技巧 (五)
  3. ubuntu 安装 navicat
  4. 有趣的鼠标悬浮模糊效果总结---(filter,渐变文字)
  5. dynamic-imports &amp; web components &amp; html dynamic import
  6. idea使用之maven中央仓库索引更新
  7. redis可视化界面的操作【二十一】
  8. PKCS填充方式
  9. Codeforces 631A Interview【模拟水题】
  10. php-fpm回顾和总结