Spring的ioc配置

1.实例化bean

               只需要在配置文件中添加<bean></bean>即可

             (1)最基础配置

<bean id="bean_test" class="cn.qtone.test.HelloWorld"></bean>
                       实际上就相当于调用无参构造方法生成一个对象,等同于:

HelloWorld tmp = new HelloWorld();
                      那么如果我们需要通过其他构造方法来生成对象,该如何做呢?

                      假如我们现在有如下构造方法:

public HelloWorld(String str)
{
    ……
}

public HelloWorld(Date date, int i)
{
    ……
}
                       这个时候,就需要在bean的配置上加上构造参数:

<!-- 使用一个参数的构造 -->
<bean id="bean_test" class="cn.qtone.test.HelloWorld" scope="prototype">
    <constructor-arg value="hello"></constructor-arg> 
</bean>
                       如果使用2个参数的构造方法,那么应该这么写:

<bean id="bean_date" class="java.util.Date" />

<!-- 使用二个参数的构造 -->
<bean id="bean_test" class="cn.qtone.test.HelloWorld" scope="prototype">
    <constructor-arg ref="bean_date"></constructor-arg> 
    <constructor-arg value="345"></constructor-arg> 
</bean>
                      这里使用了ref关键字,表示引用配置文件中id为bean_date的对象。对于类型,spring会做恰当的转换,如将345转化为数字

                       另外,如果构造方法参数过多,可以使用下标指定指定位置的参数:

    <bean id="bean_date" class="java.util.Date"></bean>
    <bean id="person" class="spring.Person">
        <constructor-arg index="0" value="ningyue"></constructor-arg>
        <constructor-arg index="1" value="23"></constructor-arg>
        <constructor-arg index="2" ref="bean_date"></constructor-arg>
    </bean>

              (2)使用工厂创建
                         实际上就是通过工厂的方法来生成对象,可以是静态工厂,也可以是普通工厂。

                         1)静态工厂

                               对于静态工厂,里面生成对象的方法必须是静态的,所以静态工厂类可以不进行实例化

<bean id="PersonBean1" class="com.bean.PersonServiceBeanFactory" factory-method="createPersonBean1"/>

                         2)实例工厂

                               对于实例工厂,里面生成对象的方法不是静态的,所以必须也要对工厂类生成实例

<bean id="PersonBeanFactory"     class="com.bean.PersonBeanFactory" ></bean>
<bean id="PersonBean3" factory-bean="PersonBeanFactory" factory-method="createPersonBean2"></bean>


2.bean中属性设置

               简单地说,就是将Class中的属性赋值。通过property标签可以实现

             (1)简单属性设置

<bean id="bean_test" class="cn.qtone.test.HelloWorld">
    <property name="hello" value="你好!" />
    <property name="world" value="世界" />
    <property name="date" ref="bean_date" />
</bean>
                因为实际上就是使用setXXX方法来进行设置的。

             (2)集合属性设置

                       1)set集合

<bean id= "PersonService" class = "com.serviceImpl.PersonServiceImpl">
		<property name="set">
			<set>
				<value>1</value>
				<value>2</value>
				<value>3</value>
			</set>
		</property>
</bean>

                          PersonServiceImpl类中

private Set<Integer>set= null;
publicvoidsetSet(Set<Integer> set)
{
                this.set = set;
}<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);">           </span>

                          2)list集合

<bean id= "PersonService" class = "com.serviceImpl.PersonServiceImpl">
		<property name="list">
			<list>
				<value>list1</value>
				<value>list2</value>
				<value>list3</value>
			</list>
		</property>
</bean>
                         3)map集合

<bean id= "PersonService" class = "com.serviceImpl.PersonServiceImpl">
		<property name="map">
			<map>
				<entry key="key1" value="value1"></entry>
				<entry key="key2" value="value2"></entry>
				<entry key="key3" value="value3"></entry>
			</map>
		</property>
</bean>

3.bean其他属性设置

               (1)id和name

                         id和name都可以作为bean的标识符,但是name比较灵活,能够使用id不能使用的字符

               (2)scope

                         1)singleton

                                表示在容器中只有一个bean的实例,如果不指定scope,默认的就是singleton

    <bean id="bean_date" class="java.util.Date" scope="singleton"></bean>

                         2)prototype

                                表示每次接到该类型对象的请求的时候,都会重新生成一个新的对象实例

                         3)request

                                表示spring容器,即XMLWebApplicationContext会为每一个http请求创建一个全新的对象,请求结束后,该对象实例的生命周期也就结束了。实际上request算是prototype的一种特例,除了request只能用在web应用中,其他都差不多。

                         4)session

                                对于web应用来说,放到session中最普遍的信息就是用户的登录信息,对于这种放到session中的信息,我们可以指定scope为session


                注:如果bean过多,则可以以包为单位进行扫描,标签为:

 <context:component-scan base-package="包名"></context:component-scan>
                        这样的话,指定包下面的类都由spring来管理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值