Spring 基于设置函数的依赖注入

当容器调用一个无参的构造函数或一个无参的静态factory方法来初始化你的bean后,通过容器在你的bean上调用设值函数,基于设值函数的DI就完成了。

下面是TextEditor.java:

package com.tuorialsponit;

public class TextEditor {
private SpellChecker spellChecker;
public void spellCheck() {
spellChecker.checkSpelling();
}
public SpellChecker getSpellChecker() {
return spellChecker;
}
public void setSpellChecker(SpellChecker spellChecker) {
System.out.println("Inside setSpellChecker");
this.spellChecker = spellChecker;
} }

SpellChecker.java

package com.tuorialsponit;

public class SpellChecker {
public SpellChecker(){
System.out.println("Inside SpellChecker constructor.");
} public void checkSpelling(){
System.out.println("Inside checkSpelling.");
}
}

MainApp.java文件的内容:

public static void main(String[] args){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
// HelloWorld obj1 = (HelloWorld) context.getBean("helloworld");
// System.out.println(obj1.getMessage1());
// System.out.println(obj1.getMessage2());
//
// System.out.println("-----------------------");
// HelloIndia obj2 = (HelloIndia) context.getBean("helloIndia");
// System.out.println(obj2.getMessage1());
// System.out.println(obj2.getMessage2());
// System.out.println(obj2.getMessage3());
// String message = obj.getMessage();
// System.out.println(message);
TextEditor textEditor = (TextEditor) context.getBean("textEditor");
textEditor.spellCheck();
}

配置文件beans.xm的内容:

<bean id="textEditor" class="com.tuorialsponit.TextEditor">
<!-- <constructor-arg ref="spellChecker"></constructor-arg> -->
<property name="spellChecker" ref="spellChecker"></property>
</bean> <bean id="spellChecker" class="com.tuorialsponit.SpellChecker">
</bean>

你应该注意定义在基于构造函数注入和基于设置函数注入中beans.xml文件的区别。唯一的区别在于使用的标签元素不同。第二个你需要注意的点是,如果你要把一个引用传递给一个对象,那么你需要使用标签的ref属性,而如果你要直接传递一个值,那么你应该使用value属性。

运行结果:

使用p-namespace实现XML配置

如果你有很多的设置函数方法,那么在xml配置文件中使用p-namespace是非常方便的。让我们查看一下区别:

 xmlns:p="http://www.springframework.org/schema/p"
<bean id="helloworld" class="com.tuorialsponit.HelloWorld"
p:message1="Hello world"
p:message2="Hello Second World">
<!-- <property name="message1" value="Hello world"/>
<property name="message2" value="Hello Second World"></property> -->
</bean>

在这里,你不应该区别指定原始值和带有p-namespace的对象引用。-ref部分表明这不是一个直接的值,而是对另一个bean的引用。

注入内部Beans

正如你所知道的Java内部类是在其他类的范围内被定义的,同理,inner beans是在其他bean的范围内定义的bean。

如下所示:

<bean id="outerBean" class="...">
<property name="target">
<bean id="innerBean" class="..."></bean>
</property>
</bean>

beans.xml如下:

<bean id="textEditor" class="com.tuorialsponit.TextEditor">
<!-- <constructor-arg ref="spellChecker"></constructor-arg> -->
<property name="spellChecker">
<bean id="spellChecker" class="com.tuorialsponit.SpellChecker">
</bean>
</property>
</bean>

Spring-基于设置函数的依赖注入的更多相关文章

  1. Spring基于Setter函数的依赖注入(DI)

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/dependency-injection/spring-setter-based-dependenc ...

  2. Spring 基于set方法的依赖注入

    注意,再次强调,注入一个值用value,注入一个引用,要使用    ref   来注入 同时,注入的对象,要有set和get方法,才能通过方法注入. <?xml version="1. ...

  3. Spring基于构造函数和设值函数的依赖注入

    基于构造函数的依赖注入 我们知道,bean标签中指定的类会进行初始化,这个初始化过程中自然会调用构造函数,那我们也可以利用这个构造函数完成依赖注入. 先创建一个类: public class Text ...

  4. Spring的自动装配与依赖注入

    Spring的自动装配与依赖注入 装配 = 创建Bean + 注入Bean 创建Bean 自动发现 显式注册Bean 注入Bean 基于配置的注入 自动注入 Spring的装配分为显式装配和隐式装配, ...

  5. Spring IOC(三)依赖注入

    本系列目录: Spring IOC(一)概览 Spring IOC(二)容器初始化 Spring IOC(三)依赖注入 Spring IOC(四)总结 目录 1.AbstractBeanFactory ...

  6. Java Spring学习笔记----Bean的依赖注入(设值注入方式)1

    Spring常用的两种依赖注入方式:一种是设值注入方式,利用Bean的setter方法设置Bean的属性值:另一种是构造注入,通过给Bean的构造方法传递参数来实现Bean的属性赋值: 1.设值注入方 ...

  7. 7 -- Spring的基本用法 -- 3... Spring 的核心机制 : 依赖注入

    7.3 Spring 的核心机制 : 依赖注入 Spring 框架的核心功能有两个. Spring容器作为超级大工厂,负责创建.管理所有的Java对象,这些Java对象被称为Bean. Spring容 ...

  8. Spring的核心机制:依赖注入

    依赖注入的概念 当一个对象要调用另一个对象时,一般是new一个被调用的对象,示例: class  A{ private B b=new B(); public  void  test(){ b.say ...

  9. spring学习(二)---依赖注入

    spring第二个特性是依赖注入. 学习依赖注入,首先应该明白两个问题:1,谁依赖谁:2,谁注入,注入什么? 首先还是看代码: 还是这个bean: package testSpring.busines ...

随机推荐

  1. PHP——简单的表单提交

    <body> <form name="" method="post" action="CHULI.php"> < ...

  2. web服务器优化的一些思路

    作为一个新手(并不是菜鸟,而是像我们这样的学生),维护一个网站往往是一个很头疼的问题,尤其是动态网站,更尤其是用java写的网站. 当网站的吞吐量很小的时候你会发现服务器根本不需要维护,因为几乎没有延 ...

  3. ES6学习笔记(1,let和const)

    在介绍let和const之前我们先复习一下相关的知识点. 关于函数作用域 开发过程中,在ES6(ECMA2015)标准推出之前,声明变量的方式一直都是var,而变量的作用域一般也只在函数内部,即函数作 ...

  4. sql one

    查询的话 子查询什么的都很正常 添加的话 尽量把东西都添加在一个表单里 这是源头 有个这个方便的源头 查询和删除都会方便很多 组建一个网站,不可避免的要进行调试,有些功能需要添加或者删除,对于后台来讲 ...

  5. MyBatis Generator 学习

    根据数据库,自动生成 VO.XML或者DAO的工具. 同大多数工具(或者框架)一样,需要加载一个配置文件,然后根据配置文件中的内容连接数据库,访问其中的表内容,最后生成实体类以及MAPPER. 占位用 ...

  6. 我们把Mybatis的功能架构分为三层:

    我们把Mybatis的功能架构分为三层: (1)API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库.接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理. (2) ...

  7. SharePoint Survey WebPart 调查 Web部件

    SharePoint Survey WebPart 调查 Web部件 Web部件下载地址 点击此处下载. 安装激活Web部件 过程简单此处省略. 项目描写叙述 调查是SharePoint中协同门户的一 ...

  8. ejabberd

    ejabberd是的Jabber / XMPP协议的即时通讯服务器,持牌GPLv2许可下(自由和开放源码) ,写的爱尔朗/检察官办公室.在其它特性中, ejabberd是跨平台,容错, cluster ...

  9. USACO4.2.1 网络流最大流算法

    /* ID:hk945801 TASK:ditch LANG:C++ */ #include<iostream> #include<cstdio> #include<cs ...

  10. UVa 11178:Morley’s Theorem(两射线交点)

    Problem DMorley’s TheoremInput: Standard Input Output: Standard Output Morley’s theorem states that ...