Spring的Ioc容器,是Spring的核心内容:

  作用:对象的创建和处理对象的依赖关系。

Spring容器创建对象有以下几种方式:

  1:调用无参数的构造器

<!-- 默认无参的构造器 -->
<bean id="user1" class="com.bie.po.User"></bean>  

  2:调用有参数构造器

<!-- 带参的构造器 ,基本数据类型直接写如int,引用数据类型写全名如java.lang.String-->
 <bean id="user" class="com.bie.po.User">
         <constructor-arg value="100" index="0" type="int"></constructor-arg>
         <constructor-arg value="张三" index="1" type="java.lang.String"></constructor-arg>
</bean>

    在Spring中通过配置文件使用ref元素引用其他JavaBean的实例对象

<!-- 定义一个字符串,值是'张三';String str=new String("张三"); -->
<bean id="str" class="java.lang.String">
      <constructor-arg value="张三"></constructor-arg>     
</bean>
     
<!-- 带参的构造器 ,基本数据类型直接写如int,引用数据类型写全名如java.lang.String-->
<bean id="user" class="com.bie.po.User">
     <constructor-arg value="100" index="0" type="int"></constructor-arg>
     <constructor-arg ref="str" index="1" type="java.lang.String"></constructor-arg>   
</bean>

完整的applicationContext.xml(bean.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <!-- IoC容器的配置,要创建的所有的对象都配置在这里 --> <!-- 默认无参的构造器 -->
<bean id="user1" class="com.bie.po.User"></bean> <!-- 定义一个字符串,值是'张三';String str=new String("张三"); -->
<bean id="str" class="java.lang.String">
<constructor-arg value="张三"></constructor-arg>
</bean> <!-- 带参的构造器 ,基本数据类型直接写如int,引用数据类型写全名如java.lang.String-->
<bean id="user" class="com.bie.po.User">
<constructor-arg value="100" index="0" type="int"></constructor-arg>
<!-- <constructor-arg value="张三" index="1" type="java.lang.String"></constructor-arg>
-->
<constructor-arg ref="str" index="1" type="java.lang.String"></constructor-arg> </bean>
</beans>

3:工厂类创建对象

    3.1:工厂类,静态方法创建对象

<!-- 3:工厂类创建对象
         工厂类,实例方法,必须先创建工厂
         再创建user对象,用factory的实例方法    
-->
<bean id="factory" class="com.bie.po.ObjectFactory"></bean>
<bean id="user3" factory-bean="factory" factory-method="getInstance"></bean>

    3.2:工厂类,非静态方法创建对象

<!--
         4:工厂类,静态方法,静态方法不需要实例化对象,
            class指定的就是工厂类型
            factory-method一定是工厂里面的静态方法    
-->

<bean id="user" class="com.bie.po.ObjectFactory" factory-method="getStaticInstance"></bean>

完整的applicationContext.xml(bean.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <!-- IoC容器的配置,要创建的所有的对象都配置在这里 --> <!-- 默认无参的构造器 -->
<bean id="user1" class="com.bie.po.User"></bean> <!-- 定义一个字符串,值是'张三';String str=new String("张三"); -->
<bean id="str" class="java.lang.String">
<constructor-arg value="张三"></constructor-arg>
</bean> <!-- 带参的构造器 ,基本数据类型直接写如int,引用数据类型写全名如java.lang.String-->
<bean id="user2" class="com.bie.po.User">
<constructor-arg value="100" index="0" type="int"></constructor-arg>
<!-- <constructor-arg value="张三" index="1" type="java.lang.String"></constructor-arg>
-->
<constructor-arg ref="str" index="1" type="java.lang.String"></constructor-arg>
</bean> <!-- 3:工厂类创建对象
工厂类,实例方法,必须先创建工厂
再创建user对象,用factory的实例方法
-->
<bean id="factory" class="com.bie.po.ObjectFactory"></bean>
<bean id="user3" factory-bean="factory" factory-method="getInstance"></bean> <!-- 4:工厂类,静态方法,静态方法不需要实例化对象,所以直接引用工厂类的class和方法 -->
<bean id="user" class="com.bie.po.ObjectFactory" factory-method="getStaticInstance"></bean>
</beans>

掌握Spring核心IoC容器,由简到繁,faghting~~~

Spring的核心之IoC容器创建对象的更多相关文章

  1. Spring源码解析-ioc容器的设计

    Spring源码解析-ioc容器的设计 1 IoC容器系列的设计:BeanFactory和ApplicatioContext 在Spring容器中,主要分为两个主要的容器系列,一个是实现BeanFac ...

  2. spring之:XmlWebApplicationContext作为Spring Web应用的IoC容器,实例化和加载Bean的过程

    它既是 DispatcherServlet 的 (WebApplicationContext)默认策略,又是 ContextLoaderListener 创建 root WebApplicationC ...

  3. Spring系列14:IoC容器的扩展点

    Spring系列14:IoC容器的扩展点 回顾 知识需要成体系地学习,本系列文章前后有关联,建议按照顺序阅读.上一篇我们详细介绍了Spring Bean的生命周期和丰富的扩展点,没有阅读的强烈建议先阅 ...

  4. spring之IOC容器创建对象

    1.术语了解 1.1组件/框架设计 侵入式设计 引入了框架,对现有的类的结构有影响:即需要实现或继承某些特定类. 例如: Struts框架非侵入式设计 引入了框架,对现有的类结构没有影响. 例如:Hi ...

  5. Spring 核心之IOC 容器

    核心概念: IOC(Inversion of Control)控制反转:所谓控制反转,就是把原先我们代码里面需要实现的对象创建.依赖的代码,反转给容器来帮忙实现. DI(Dependency Inje ...

  6. 【Spring专场】「IOC容器」不看源码就带你认识核心流程以及运作原理

    这是史上最全面的Spring的核心流程以及运作原理的分析指南 [Spring核心专题]「IOC容器篇」不看繁琐的源码就带你浏览Spring的核心流程以及运作原理 [Spring核心专题]「AOP容器篇 ...

  7. Spring Framework的核心:IOC容器的实现

    2.1   Spring IoC容器概述 2.1.1 IoC容器和依赖反转模式 依赖反转的要义,如果合作对象的引用或依赖关系的管理由具体对象来完成,会导致代码的高度耦合和可测性的降低.依赖控制反转的实 ...

  8. Spring 源码剖析IOC容器(一)概览

    目录 一.容器概述 二.核心类源码解读 三.模拟容器获取Bean ======================= 一.容器概述 spring IOC控制反转,又称为DI依赖注入:大体是先初始化bean ...

  9. Spring系列二:IoC 容器

    还君明珠双泪垂,恨不相逢未嫁时. 概述 Spring IoC容器是Spring框架的核心.只需要进行简单的容器配置,就可以将创建对象,使用对象,销毁对象联系在一起,从而管理从创建对象到销毁对象的整个生 ...

随机推荐

  1. HDU - 3973 AC's String(Hash+线段树)

    http://acm.hdu.edu.cn/showproblem.php?pid=3973 题意 给一个词典和一个主串.有两种操作,查询主串某个区间,问这主串区间中包含多少词典中的词语.修改主串某一 ...

  2. Java编程思想 学习笔记12

    十二.通过异常处理错误  Java的基本理念是“结构不佳的代码不能运行”. Java中的异常处理的目的在于通过使用少于目前数量的代码来简化大型.可靠的程序的生成,并且通过这种方式可以使你更加自信:你的 ...

  3. bzoj千题计划298:bzoj3997: [TJOI2015]组合数学

    http://www.lydsy.com/JudgeOnline/problem.php?id=3997 最小链覆盖=最长反链长度 所以题目等价于寻找一条从右上角到左下角的最长路 #include&l ...

  4. Shell + crontab 实现日志压缩归档

    Shell + crontab 实现日志压缩归档 crontab # archive the ats log days. */ * * * * root /bin/>& shell #! ...

  5. currentColor

    http://www.zhangxinxu.com/wordpress/2014/10/currentcolor-css3-powerful-css-keyword/

  6. Spring MVC 源码分析

      Spring MVC SpringMVC中扮演关键角色的DispatcherServlet类. 1 DispatcherServlet 1.1DispatcherServlet 类图 1.2 初始 ...

  7. pyqt5 鼠标操作

    #资料 http://blog.sina.com.cn/s/blog_6483fa330102xo6w.html import sysfrom PyQt5.QtWidgets import QAppl ...

  8. luogu P3522 [POI2011]TEM-Temperature

    这道题暴力做法就是枚举每个起点,然后向后拓展到不能拓展 就像这样(红框是每个位置的取值范围,绿线是你取的值构成的折线) 应该可以发现,左端点往右移的过程中,右端点也只能不动或往右移,所以我们可以每次移 ...

  9. History API:ScrollRestoration

    By Paul Lewis(设计和性能倡导者)   翻译:江天 使用history api管理url是非常棒的一件事,可以说这是一个好web app的极为重要的特点.但它有一个缺点,滚动位置虽然被存储 ...

  10. JS的call方法的作用解释,简单易懂

    先看看关于call()的官方解释,“调用一个对象的一个方法,以另一个对象替换当前对象.”,看了这样的解释,或许让你更摸不着头脑了.看例子: var x = "我是全局变量"; // ...