Spring有多种依赖注入的形式,本篇文章仅介绍Spring通过xml进行IOC配置的方式。

平常的Java开发中,程序员在某个类中需要依赖其它类的方法。

通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理。

Spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过Spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。

依赖注入的另一种说法是"控制反转"。通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员。

而控制反转是指new实例工作不由我们程序员来做而是交给Spring容器来做。

构造器注入:  本文使用构造器注入和引用了一个bean

先写出需要引用的bean的接口

package com.spring;

public interface SpringAocInterface {
void show();
}

实现接口

package com.spring;

public class SpringAocInterfaceIm implements SpringAocInterface {

	private final static String Lings = "最近的烦恼是小小的离别带来的寂寞,一瞬间的邂逅与分别,这一个一个的刹那,我想好好珍惜起来。";
@Override
public void show() { System.out.println(Lings); } }

需要注入的类 (提供了一个String属性和一个对象  都是通过构造方法注入)

package com.spring;

/**
* 使用构造方法
* @author Administrator
*
*/
public class SpringIoc {
private String Song; //构造方法注入 private SpringAocInterface springAocInterface; //构造方法引入对象注入 public SpringIoc(String song, SpringAocInterface springAocInterface) {
super();
Song = song;
this.springAocInterface = springAocInterface;
} public void show() {
System.out.println("构造方法传入的Song为 :" +Song);
System.out.print("构造方法引入的对象为:");
springAocInterface.show();
} }

xml配置

<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
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.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<!-- 构造方法注入 -->
<bean id="SpringIoc" class="com.spring.SpringIoc">
<constructor-arg name="song" value="5"></constructor-arg> <!-- 给SpringIoc中的song属性注入-->
<constructor-arg name="springAocInterface" ref="SpringAocInterfaceIm"></constructor-arg><!-- 给SpringIoc中的springAocInterface 注入bean -->
</bean>
<bean id="SpringAocInterfaceIm" class="com.spring.SpringAocInterfaceIm"></bean>
<beans>

写一个测试类

package com.spring.test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.spring.SpringIoc;

public class SpringIocTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
SpringIoc bean = (SpringIoc) context.getBean("SpringIoc");
bean.show();
}
}

输出结果

十月 15, 2017 10:19:50 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1e3bd51: startup date [Sun Oct 15 22:19:50 CST 2017]; root of context hierarchy
十月 15, 2017 10:19:50 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [spring.xml]
十月 15, 2017 10:19:50 下午 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@e40e825: defining beans [SpringIoc,SpringAocInterfaceIm,SpringSetIoc]; root of factory hierarchy
构造方法传入的Song为 :5
构造方法引入的对象为:最近的烦恼是小小的离别带来的寂寞,一瞬间的邂逅与分别,这一个一个的刹那,我想好好珍惜起来。

2:set注入(里面包括set注入 属性  list集合  map集合  引入bean)

package com.spring;

import java.util.List;
import java.util.Map; /**
* Spring通过Set注入
* @author Administrator
*
*/
public class SpringSetIoc {
private String name; private int age; private SpringAocInterface like; private List<Object> list; private Map<String, Object> map ; public void show() {
System.out.println("通过set方法注入的姓名为:" + name);
System.out.println("通过set方法注入的年龄为:" + age);
System.out.print("通过set方法注入对象" + name + "最喜欢的一句话为:");
like.show();
System.out.print("通过set方法注入" + name + "最喜欢吃的水果为:");
for (Object object : list) {
System.out.print(object + ",");
}
System.out.println();
System.out.print("通过set方法注入map key为string : ");
for (String m : map.keySet()) {
System.out.print(map.get(m) + ",");
}
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public SpringAocInterface getLike() {
return like;
} public void setLike(SpringAocInterface like) {
this.like = like;
} public List<Object> getList() {
return list;
} public void setList(List<Object> list) {
this.list = list;
} public Map<String, Object> getMap() {
return map;
} public void setMap(Map<String, Object> map) {
this.map = map;
} }

xml配置

<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
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.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <bean id="SpringAocInterfaceIm" class="com.spring.SpringAocInterfaceIm"></bean>
<!-- set注入 -->
<bean id="SpringSetIoc" class="com.spring.SpringSetIoc">
<property name="name" value="张三"></property>
<property name="age" value="18"></property>
<!-- <property name="like" ref="SpringAocInterfaceIm"></property> --> <!-- 这个是注入公共bean 如果需要注入内部bean 并不想被共享可以使用下面的注入方式 -->
<property name="like">
<bean class="com.spring.SpringAocInterfaceIm"></bean>
</property>
<property name="list"> <!-- 这个是注入list集合 这个是注入的值 如果想注入bean的话 可以 写成 <ref bean = "bean的名称"></ref> -->
<list>
<value>香蕉</value>
<value>橘子</value>
<value>苹果</value>
</list>
</property>
<property name="map"><!-- map注入 -->
<map>
<entry key="男士" value="李四"></entry>
<entry key="男士" value="王五"></entry>
<entry key="女士" value="小花"></entry>
</map>
</property>
</bean>
<!-- spring还提供了P命名空间 减少了尖括号 使用p命名空间的时候 需要在上方引入xmlns:p="http://www.springframework.org/schema/p" 这句代码 不然会报错 两者方法取其一就好 我使用的上面的方式-->
<!-- <bean id="SpringSetIoc" class="com.spring.SpringSetIoc" p:name = "张三"
p:age = "18"
p:like-ref="SpringAocInterfaceIm"/> -->
</beans>

测试类

package com.spring.test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.spring.SpringSetIoc;

public class SpringSetIocTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
SpringSetIoc bean = (SpringSetIoc) context.getBean("SpringSetIoc");
bean.show();
}
}

输出结果

十月 15, 2017 10:26:14 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@7f1633fd: startup date [Sun Oct 15 22:26:14 CST 2017]; root of context hierarchy
十月 15, 2017 10:26:15 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [spring.xml]
十月 15, 2017 10:26:15 下午 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@741c42a9: defining beans [SpringIoc,SpringAocInterfaceIm,SpringSetIoc]; root of factory hierarchy
通过set方法注入的姓名为:张三
通过set方法注入的年龄为:18
通过set方法注入对象张三最喜欢的一句话为:最近的烦恼是小小的离别带来的寂寞,一瞬间的邂逅与分别,这一个一个的刹那,我想好好珍惜起来。
通过set方法注入张三最喜欢吃的水果为:香蕉,橘子,苹果,
通过set方法注入map key为string : 王五,小花,

最后奉上完整版的xml配置文件 包含构造注入和set注入

<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
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.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<!-- 构造方法注入 -->
<bean id="SpringIoc" class="com.spring.SpringIoc">
<constructor-arg name="song" value="5"></constructor-arg> <!-- 给SpringIoc中的song属性注入-->
<constructor-arg name="springAocInterface" ref="SpringAocInterfaceIm"></constructor-arg><!-- 给SpringIoc中的springAocInterface 注入bean -->
</bean>
<bean id="SpringAocInterfaceIm" class="com.spring.SpringAocInterfaceIm"></bean>
<!-- set注入 -->
<bean id="SpringSetIoc" class="com.spring.SpringSetIoc">
<property name="name" value="张三"></property>
<property name="age" value="18"></property>
<!-- <property name="like" ref="SpringAocInterfaceIm"></property> --> <!-- 这个是注入公共bean 如果需要注入内部bean 并不想被共享可以使用下面的注入方式 -->
<property name="like">
<bean class="com.spring.SpringAocInterfaceIm"></bean>
</property>
<property name="list"> <!-- 这个是注入list集合 这个是注入的值 如果想注入bean的话 可以 写成 <ref bean = "bean的名称"></ref> -->
<list>
<value>香蕉</value>
<value>橘子</value>
<value>苹果</value>
</list>
</property>
<property name="map"><!-- map注入 -->
<map>
<entry key="男士" value="李四"></entry>
<entry key="男士" value="王五"></entry>
<entry key="女士" value="小花"></entry>
</map>
</property>
</bean>
<!-- spring还提供了P命名空间 减少了尖括号 使用p命名空间的时候 需要在上方引入xmlns:p="http://www.springframework.org/schema/p" 这句代码 不然会报错 -->
<!-- <bean id="SpringSetIoc" class="com.spring.SpringSetIoc" p:name = "张三"
p:age = "18"
p:like-ref="SpringAocInterfaceIm"/> -->
</beans>

Spring3实战第二章第二小节 IOC依赖注入 list和map集合的更多相关文章

  1. Ionic 入门与实战之第二章第二节:Ionic 环境搭建之 Ionic Lab 使用

    原文发表于我的技术博客 本文是「Ionic 入门与实战」系列连载的第二章第二节,主要对 Ionic Lab 工具作了介绍,并讲解了其使用方法,这也是一个开发 Ionic 比较好的调试工具. 原文发表于 ...

  2. 浅谈(IOC)依赖注入与控制反转(DI)

    前言:参考了百度文献和https://www.cnblogs.com/liuqifeng/p/11077592.html以及http://www.cnblogs.com/leoo2sk/archive ...

  3. ASP.NET MVC IOC依赖注入之Autofac系列(二)- WebForm当中应用

    上一章主要介绍了Autofac在MVC当中的具体应用,本章将继续简单的介绍下Autofac在普通的WebForm当中的使用. PS:目前本人还不知道WebForm页面的构造函数要如何注入,以下在Web ...

  4. ASP.NET MVC IOC依赖注入之Autofac系列(一)- MVC当中应用

    话不多说,直入主题看我们的解决方案结构: 分别对上面的工程进行简单的说明: 1.TianYa.DotNetShare.Model:为demo的实体层 2.TianYa.DotNetShare.Repo ...

  5. IOC依赖注入简单实例

    转自:http://hi.baidu.com/xyz136299110/item/a32be4269e9d0c55c38d59e6 相信大家看过相当多的IOC依赖注入的例子. 但大家在没有明白原理的情 ...

  6. IoC 依赖注入容器 Unity

    原文:IoC 依赖注入容器 Unity IoC 是什么? 在软件工程领域,“控制反转(Inversion of Control,缩写为IoC)”是一种编程技术,表述在面向对象编程中,可描述为在编译时静 ...

  7. springboot启动流程(九)ioc依赖注入

    所有文章 https://www.cnblogs.com/lay2017/p/11478237.html 正文 在前面的几篇文章中,我们多次提到这么一个转化过程: Bean配置 --> Bean ...

  8. Spring-DI控制反转和IOC依赖注入

    Spring-DI控制反转和IOC依赖注入 DI控制反转实例 IDEAJ自动导入Spring框架 创建UserDao.java接口 public interface UserDao { public ...

  9. Spring学习-spring核心机制-IOC依赖注入

    转载自:http://www.cnblogs.com/chenssy/archive/2012/11/11/2765266.html 今天复习一下spring两大特性之一:IOC依赖注入,看了一下大佬 ...

随机推荐

  1. Vue项目中使用HighChart

    记:初次在Vue项目中使用 HighChart 的时候要走的坑 感谢这位哥们的思路 传送门 Vue-cli项目使用 npm install highcharts --save 让我们看看 highch ...

  2. Android开发多媒体应用之SoundPool的使用的代码

    内容过程中,把写内容过程中比较好的内容段记录起来,下面的内容是关于Android开发多媒体应用之SoundPool的使用的内容,希望对各位也有用途. public class MainActivity ...

  3. django-获取当前url和ip

    1.添加'django.template.context_processors.request', 2.在模板的html中输入 {{ request.path}}{{ request.get_host ...

  4. 学习总结 —— python

    1.了解python 学习python 3 入门知识 python  库 .包  .模块 2.了解pycharm Pycharm 导入 Python 包.模块 pycharm 快捷键 3.了解djan ...

  5. win10操作系统系统,小米路由器,小米3 的问题

    注意 , 置顶 单独一篇 : { win10  局域网共享 小米路由器,操作盘太卡 } 开发中用专业版 , 别用家庭版 比如有远程桌面程序 和 HV 虚拟机 查看激活信息 和 是不是永久激活 参考 h ...

  6. Java_无参数无返回类型方法及练习

    无参数无返回类型方法语法格式: public static void 方法名称(){ 方法体; } class Method03{ /*练习3:输出1-100中的每个数,要求使用无参无返回类型的方法完 ...

  7. GridView控件详解

    一.介绍 GridView控件一表格形式显示数据源中的数据.提供对列进行排序.分页以及编辑.删除单个记录的功能. 二.绑定数据源 第一种使用DataSourceID属性.可以直接把GridView控件 ...

  8. TSM_ISSUE_123

    dsmc 命令详解http://www-ik.fzk.de/~apel/html/adsm_manual.htmlTSM InfoCenterhttp://www-01.ibm.com/support ...

  9. 【ExtJS】简单布局应用

    前几天学习了ExtJS的各种布局后,以下就是各种实践,从简单做起. 实现目的: 一个提交表单页,一个显示信息页,表单为个人基本资料输入,显示页为基本信息展示. 内容: 总体布局为border布局,展示 ...

  10. shiro的授权

    1.授权的流程 2.三种授权方式 1.编程式:通过写if/else 授权代码块完成: Subject subject = SecurityUtils.getSubject(); if(subject. ...