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)集合属性设置
<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来管理