开始之前:

1. 本博文为原创,转载请注明出处

2. 作者非计算机科班出身,如有错误,请多指正

---------------------------------------------------------------------------开始啦啦啦啦啦-------------------------------------------------------------------------------

上一篇博文简单的演示了如何用Spring框架创建bean,注入bean,并使用到Java当中运行。本篇会集中介绍bean创建时的一些命名和初始化的规则。

每一个bean都有且仅有一个独有的标识符(identifier),如果这个bean需要不只一个标识符,我们可以用别名(aliases)的方式。

<alias name="fromName" alias="toName"/>

对于xml定义的Ioc容器来说,标识符就是id或者name。如果没有指定id或者name,Spring会自动生成该bean的一个标识符。不过本人还是建议大家初学要指定id或者name,这样在使用依赖的时候出错的概率会小一些。

下面我们来实战一下bean的生成,本篇会演示三种写法(虽然上一篇已经使用过构造器方法,本篇还是会回顾一下)

1. 构造器方法

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="bird"
          class="com.dabingguozi.ioc2.pojo.ioc2.Bird">
        <!-- additional collaborators and configuration for this bean go here -->
    </bean>

    <bean name="rabbit" class="com.dabingguozi.ioc2.pojo.ioc2.Rabbit">
        <!-- additional collaborators and configuration for this bean go here -->
    </bean>

</beans>

而我们的Java pojo是什么样子的呢?拿rabbit举个例子

public class Rabbit {
    private Rabbit() {
    }
}

于是我们跑这样一个主程序

public class Application {
    public static void main(String[] a){
        ApplicationContext context =
                new ClassPathXmlApplicationContext(new String[] {"ioc2_animal.xml"});
        Bird bird = context.getBean("bird", Bird.class);
        Rabbit rabbit = context.getBean("rabbit", Rabbit.class);
        System.out.println(bird.getClass().getName());
        System.out.println(rabbit.getClass().getName());

    }
}

bling~bling~结果就是这样啦~

2. 静态工厂方法

静态工厂提供创建实例的静态方法,所以Java Class就是这样的啦

public class Fish {
    private static Fish fish = new Fish();
    private Fish(){

    }
    public static Fish createInstance(){
        return fish;
    }
}

而bean的定义呢,就是这样,其中factory-method映射到class的静态工厂方法,通过这样的初始化定义,id为fish的bean就会被创建

<bean id="fish"
          class="com.dabingguozi.ioc2.pojo.ioc2.Fish"
          factory-method="createInstance"/>

亲测也是成功的哟~

3. 实例工厂方法

所谓实例工厂呢,就是这样的一个Java工厂方法,注意这个工厂可不是静态的哦~

public class Zoo {
    private static Rabbit rabbit= new Rabbit();
    private Zoo(){}

    public Rabbit createRabbitInstance(){
        return rabbit;
    }
}

而我们的xml是这样定义的:

<bean name="zoo" class="com.dabingguozi.ioc2.pojo.ioc2.Zoo">
        <!-- additional collaborators and configuration for this bean go here -->
    </bean>

    <bean id = "rabbit" factory-bean="zoo" factory-method="createRabbitInstance"/>

也就是说,我们先有一个zoo的bean,然后在创建rabbit bean的时候,使用zoo这个bean里面的createRabbitInstance工厂方法作为rabbit bean的创建方法。

跑一下主程序

成功创建rabbit,散花~~~

下一篇:Spring学习之Ioc控制反转(3)(这不是link,戳不开2333)

本篇主要集中讲述bean的创建方法,下一篇将会介绍bean的依赖注入方法,尽请期待,诚谢观看。

本博客内容参考spring framework官方文档,如有冲突,请参照原版内容

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/index.html

Spring学习之Ioc控制反转(2)的更多相关文章

  1. Spring学习之Ioc控制反转(1)

    开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------- ...

  2. Spring框架之IOC(控制反转)

    [TOC] 第一章Spring框架简介 IOC(控制反转)和AOP(面向方面编程)作为Spring框架的两个核心,很好地实现了解耦合.所以,简单来说,Spring是一个轻量级的控制反转(IoC)和面向 ...

  3. Spring框架中IoC(控制反转)的原理(转)

    原文链接:Spring框架中IoC(控制反转)的原理 一.IoC的基础知识以及原理: 1.IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作, ...

  4. Spring源码——IOC控制反转

    1.基础知识 Spring有两个核心功能,分别是ioc和aop,其中ioc是控制反转,aop是切面编程. 在ioc中,还有一个名次叫DI,也就是依赖注入.嗯,好像IOC和DI是指同一个,好像又感觉他俩 ...

  5. Spring第一课:IOC控制反转,什么是反转,什么又是控制?

    前言 学习Spring第一课,就是认识IOC控制反转,要了解它还真得花一些功夫.今天主要理解透彻它的真谛,而不仅限于表面. 上道小菜 public class BusinessService { pr ...

  6. Spring 什么是 IOC 控制反转 ?什么是依赖注入?spring的用处 好处 为什么要用

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha Spring是一个开源的控制反转(Inversion of Control ,IoC)和 ...

  7. 零基础带你看Spring源码——IOC控制反转

    本章开始来学习下Spring的源码,看看Spring框架最核心.最常用的功能是怎么实现的. 网上介绍Spring,说源码的文章,大多数都是生搬硬推,都是直接看来的观点换个描述就放出来.这并不能说有问题 ...

  8. spring学习总结一----控制反转与依赖注入

    spring作为java EE中使用最为广泛的框架,它的设计体现了很多设计模式中经典的原则和思想,所以,该框架的各种实现方法非常值得我们去研究,下面先对spring中最为重要的思想之一----控制反转 ...

  9. Spring学习笔记——01 控制反转

    想一下之前学的Java,如果某个类需要引用某个对象,则需要手动new一个出来.这样带来的一个问题就是,若被引用的类发生改动或被删除,则引用它的所有类都会报错.因为两个类耦合在一起了.解决的办法就是不由 ...

随机推荐

  1. url 的httppost 和http get ,put,delect

    URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源 ,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查 ,改 ,增 ,删 4个操作 .到这里 ...

  2. 第二章实例:ActionBar结合Fragment显示

    package tab.test; import com.example.actionbar_tab.R; import android.app.ActionBar; import android.a ...

  3. SQL Server Schema

    SQL查询是引用表时,需要为其制定模式名. 在数据库的术语中,模式就是名称空间.这种方式可以把相同特性的对象组合到一个共同的名称空间中.模式也可以保护对象,所以DBA可以给模式授予显示权限. 例如,D ...

  4. <转>java中静态方法和非静态方法的存储

    Java中非静态方法是否共用同一块内存? 将某 class 产生出一个 instance 之后,此 class 所有的 instance field 都会新增一份,那么所有的 instance met ...

  5. 【Python备忘】python判断文件和文件夹是否存在

    python判断文件和文件夹是否存在 import os os.path.isfile('test.txt') #如果不存在就返回False os.path.exists(directory) #如果 ...

  6. C语言--基本运算符

    一.算术运算符 1. 加法运算符 + * 除了可以进行加法运算外,还可以表示正号:+521 2.减法运算符 — * 除了可以进行减法运算外,还可以表示负号:—741 3.乘法运算法符 * * 请注意符 ...

  7. 在C#中调用Win32函数EnumWindows枚举所有窗口。

    原文 http://www.cnblogs.com/mfm11111/archive/2009/06/30/1514322.html 开发旺旺群发软件,难点及重要技术点分析(一) 一.        ...

  8. [置顶] lvs-tun隧道模式搭建

    一.lvs直接路由原理 由于图片还要一张一张上传,可以到下面网站下载我的word版本: http://download.csdn.net/user/y0908105023 补充基础知识: OSI(Op ...

  9. perl 调用按钮输出到文本框

    sub push_b4 { #$txt -> insert('end'); #select $txt; system("expect c:\\\\expect.txt >expe ...

  10. 必学100个常用linux命令大全

    1,echo “aa” > test.txt 和 echo “bb” >> test.txt //>将原文件清空,并且内容写入到文件中,>>将内容放到文件的尾部 2 ...