zoukankan      html  css  js  c++  java
  • Spring——Bean的命名及实例化

    一、Bean的命名

    前一篇讲到IoC是一个管理Bean的容器,Bean多数情况下都是通过XML文件进行配置的,其中Bean的命名有以下几种方式,现在梳理一下。

    1. 不指定id,只配置类名

    <bean class="com.erving.HelloImpl"></bean>

    若要调用该Bean,需要用以下语句:

    HelloApi helloApi = context.getBean(HelloApi.class);

    2. 指定id,且id必须在IoC容器中唯一

    <bean id="hello" class="com.erving.HelloImpl"></bean>

    若要调用,则需要用以下语句:

    HelloApi helloApi = context.getBean("hello", HelloApi.class);

    3. 指定name,且name必须在IoC容器中唯一

    <bean name="hello" class="com.erving.HelloImpl"></bean>

    若要调用,则需要用以下语句:

    HelloApi helloApi = context.getBean("hello", HelloApi.class);

    4. 同时指定了id和name,则id作为标识符,name作为别名,这两者在容器中都唯一。

    <bean id="hello" name="alias" class="com.erving.HelloImpl"></bean>

    这时Bean即可通过id实例化,也可通过name实例化:

    HelloApi helloApi1 = context.getBean("hello", HelloApi.class);
    HelloApi helloApi2 = context.getBean("alias", HelloApi.class);

    5. 当一个Bean有多个name时,第一个为标识符,其他的为别名。多个name之间可通过分号、顿号或空格隔开。

    6. 此外,还可以通过<alias>标签指定别名。

    <bean name="hello" class="com.erving.HelloImpl"></bean>
    <alias name="hello" alias="alias"/>

    这与以下语句的效果完全一致

    <bean name="hello;alias" class="com.erving.HelloImpl"></bean>

    二、Bean的实例化

    Bean的实例化有三种形式,分别为构造器、静态工厂和实例工厂。

    1. 构造器。

    通常情况,通过反射调用指定类的构造器来创建bean。此时bean的类型不一定为JavaBean,任何Java类都可以。构造器又分为无参数构造器和有参数构造器。

    以上介绍的都是无参数构造器,配置如下:

    <bean id="hello" class="com.erving.HelloImpl"></bean>

    有参数的构造器,配置如下:

    <bean name="hello" class="com.erving.HelloImpl2">
         <constructor-arg index="0" value="erving..."></constructor-arg>
    </bean>

    2. 静态工厂。

    首先定义静态工厂类:

    public class HelloApiStaticFactory {
        
        public static HelloApi newInstance(String message) {
            return new HelloImpl2(message);
        }
    }

    然后编辑配置文件:

    <bean id="bean2" class="com.erving.HelloApiStaticFactory" factory-method="newInstance">
          <constructor-arg index="0" value="tian..."></constructor-arg>
    </bean>

    其中的class属性为静态工厂类,另外需要指明实例化bean的方法。

    具体实例化与第一种方法完全一致:

    public void testStaticFactory() {
        ApplicationContext context = new ClassPathXmlApplicationContext("helloworld.xml");
        HelloApi helloApi = context.getBean("bean2", HelloApi.class);
        helloApi.sayHello();
    }

    3. 实例工厂。

    首先定义实例工厂类:

    public class HelloApiInstanceFactory {
        
        public HelloApi newInstance(String message) {
            return new HelloImpl2(message);
        }
    }

    然后修改配置文件,配置文件分为两部分:一是实例工厂的bean,二是通过工厂bean创建bean。

    <!-- 1、定义实例工厂Bean -->  
    <bean id="beanInstanceFactory" class="com.erving.HelloApiInstanceFactory"/>  
    <!-- 2、使用实例工厂Bean创建Bean -->  
    <bean id="bean4" factory-bean="beanInstanceFactory" factory-method="newInstance">  
        <constructor-arg index="0" value="Hello Spring!"></constructor-arg>  
    </bean>
  • 相关阅读:
    window执行python文件
    百钱买百鸡
    牛的数量有多少
    如何实现杨辉三角
    怎样求解斐波那契数列
    php快速做外包后台开源产品
    如何实现洗牌算法
    如何获取规定的排列组合
    怎样才能得到阿姆斯壮数
    如何利用约瑟夫环来保护你与你的朋友
  • 原文地址:https://www.cnblogs.com/thErving/p/6858895.html
Copyright © 2011-2022 走看看