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>