Spring学习之Ioc控制反转

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring学习之Ioc控制反转相关的知识,希望对你有一定的参考价值。

开始之前:

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控制反转的主要内容,如果未能解决你的问题,请参考以下文章

spring--学习之IOC DI

Spring框架学习之IOC

框架学习之Spring(一IOC)----HelloWrod

Spring中的IoC(控制反转)具体是什么东西

SSH框架入门学习之二(spring)

[Spring]IOC控制反转