Spring的对象创建与多种数据类型的注入

Spring的配置文件的一个作用,就是要完成IoC(控制反转),即:把创建对象的过程从硬代码中剥离,而由其配置文件applicationContext.xml实现。
该配置文件就相当于一个工厂类,在内部创建类的实例对象,而对外直接提供对象。
也就是spring代理了对象的创建过程。
其创建类的方法有一下三种:
1、从该类的静态工厂创建bean对象,如:

<bean id="userDao1" class="com.fh.factory.StaticFactory" factory-method="getUserDaoImpl1"/>

等价于:
UserDao userDao1 = com.fh.factory.StaticFactory.getUserDaoImpl1();
2、从该类的实例工厂创建其bean对象,如:

<bean id="myFactory" class="com.fh.factory.InstanceFactory"/>
<bean id="userDao2" factory-bean="myFactory" factory-method="getUserDaoImpl2" />

以上两步依次等价于:
InstanceFactory myFactory = new com.fh.factory.InstanceFactory();
UserDao userDao2 = myFactory.getuserDaoImpl2();
3、从该类的本身创建其bean对象,如下:

<!--
    下面相当于new com.fh.domain.User(),然后对该实例给予声明user,即:User user = new com.fh.domain.User();
    然后注入数据,需要pojo类中提供set方法以用于注入
    最后存于本xml文档中,待外界利用ApplicationContext加载完成本xml文档后,便可利用getBean方法,传入id名和类名(利用泛型防止强转,可不用而需要强转)获取该对象
    也就是IoC(控制反转),把创建对象的全部过程于此xml文档中完成,本xml文档相当于一个工厂类,对外直接提供对象
    -->
    <bean id="user" class="com.fh.domain.User">
        <!--注入数据:-->
        <!--1、简单数据类型,先对其uid属性和username属性分别注入数据-->
        <property name="uid" value="123"/>
        <property name="username" value="harry"/>
        <!--2、引用数据类型注入,需另外新建引用类的对象,如下,然后将下面的引用类型数据利用ref字段,关联到此处-->
        <property name="birthday" ref="time"/>
        <!--3、数组中注入'a','b','c'-->
        <property name="myArray">
            <array>
                <value>a</value>
                <value>b</value>
                <value>c</value>
            </array>
        </property>
        <!--4、list中注入'aa','bb'-->
        <property name="myList">
            <list>
                <value>aa</value>
                <value>bb</value>
            </list>
        </property>
        <!--5、set中注入'aaa','bbb'-->
        <property name="mySet">
            <set>
                <value>aaa</value>
                <value>bbb</value>
            </set>
        </property>
        <!--6、map中注入'jack'='black','lisa'='red'-->
        <property name="myMap">
            <map>
                <entry key="jack" value="black"/>
                <entry key="lisa" value="red"/>
            </map>
        </property>
        <!--7、properties中注入k2=v2, k1=v1-->
        <property name="myProperties">
            <props>
                <prop key="k1">v1</prop>
                <prop key="k2">v2</prop>
            </props>
        </property>
    </bean>

    <!--引用类型的数据注入,需先对引用类型新建对象,如下面的日期,则:Date time = new java.util.Date(); 且时间属性不要单例,其默认为单例singleton,因此手动设定为protoType-->
    <bean id="time" class="java.util.Date" scope="prototype"/>

且除了设定属性的注入数据的方法,还可以利用构造方法进行数据注入,如下:

<bean id="user2" class="com.fh.domain.User">
        <constructor-arg name="uid" value="111" />
        <constructor-arg name="username" value="lisa" />
        <constructor-arg name="birthday" ref="time"/>
</bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值