Spring的ioc配置

来源:互联网 发布:java webservice 抓包 编辑:程序博客网 时间:2024/05/09 17:27

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
原创粉丝点击