spring配置Bean
Posted fjk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring配置Bean相关的知识,希望对你有一定的参考价值。
Bean 就是一个类
一下代码都是基于spring之IOC和DI实现案例基础上进行解析
Bean的实例化方式:
1.无参构造
<bean id="UserService" class="com.baidu.test.UserServiceImp"> <property name="name" value="张三"></property> </bean>
2.静态工厂方法
applicationContext.xml
<bean id="UserService" class="com.baidu.test.BeanFactory2" factory-method="CreateUserServiceImp">
<property name="name" value="张三"></property>
</bean>
创建BeanFactory2类
public class BeanFactory2 { public static UserService CreateUserServiceImp(){ return new UserServiceImp(); } }
3.实例工厂方法
<bean name="BeanFactory2" class="com.baidu.test.BeanFactory2"></bean> <bean id="UserService" factory-bean="BeanFactory2" factory-method="CreateUserServiceImp"> <property name="name" value="张三"></property> </bean>
创建BeanFactory2类
public class BeanFactory2 { public UserService CreateUserServiceImp(){ return new UserServiceImp(); } }
Bean的作用域
在bean的属性中有个scope,用来描述bean的作用域.
singleton | 单例 spring IOC容器中只有一个Bean实类(默认的scope) |
prototype | 多例 从spring容器中获取时都会返回一个新的实例 |
request | 将bean对象request.setAttribute()存储到request域中 |
session | 将bean对象session.setAttribute()存储到session域中 |
开发中常用singleton和prototype(单例和多例)
Bean的属性注入
1.构造方法注入
提供构造方法
public UserServiceImp(String name) { super(); this.name = name; }
修改applicationContext.xml文件
<bean id="UserService" class="com.baidu.test.UserServiceImp"> <constructor-arg index="0" value="张三" type="java.lang.String"></constructor-arg>
</bean>
2.Setter注入
修改applicationContext.xml
<bean id="user" class="com.baidu.test.User">
<property name="name" value="uuu"></property>
<property name="age" value="15"></property>
</bean>
<bean id="UserService" class="com.baidu.test.UserServiceImp">
<property name="name" value="uu"></property>
<property name="u" ref="user"></property>//引入另一个bean
</bean>
3.map注入
<bean id="user" class="com.baidu.test.User"> <property name="name" value="uuu"></property> <property name="age" value="15"></property> </bean> <bean id="UserService" class="com.baidu.test.UserServiceImp"> <property name="name" value="uu"> </property> <property name="list"> <list> <value>10</value> <value>张三</value> <ref bean="user"/> </list> </property> <property name="set"> <set> <value>张三</value> <ref bean="user"/> </set> </property> <property name="map"> <map> <entry key="1" value-ref="user"></entry> <entry key="2" value="12"></entry> </map> </property> </bean>
空间名称p和c
引入schma
xmlns:c="http://www.springframework.org/schema/c" xmlns:p="http://www.springframework.org/schema/p"
首先它们不是真正的名称空间,是虚拟的。它是嵌入到 spring 内核中的。 使用 p 名称空间可以解决我们 setter 注入时<property>简化 使用 c 名称空间可以解决我们构造器注入时<constructor-arg>简化
applicationContext.xml
p名称空间 --------- setter注入
<bean id="user" class="com.baidu.test.User">
<property name="name" value="uuu"></property>
<property name="age" value="15"></property>
</bean>
<bean id="UserService" class="com.baidu.test.UserServiceImp" p:name="uu" p:u-ref="user" >
</bean>
c名称空间------- 构造器注入
<bean id="UserService" class="com.baidu.test.UserServiceImp" c:name="uu" c:u-ref="user" > </bean>
SPEL(spring expression language) spring 3.0版本以后
它类似于 ognl 或 el 表达式,它可以提供在程序运行时构造复杂表达式来完成对象属性存储 及方法调用等。 Spel 表达式的格式 #{表达式}
applicationContext.xml
1.完成bean之间的注入
<bean id="user" class="com.baidu.test.User"> <property name="name" value="uuu"></property> <property name="age" value="15"></property> </bean> <bean id="UserService" class="com.baidu.test.UserServiceImp"> <property name="name" value="uu"></property>
<!-- <property name="u" ref="user"></property>-> <property name="u" value="#{user}"></property>替代上面的ref值(完成bean之间的注入) </bean>
2.支持属性调用和即方法调用
<bean id="user" class="com.baidu.test.User"> <property name="name" value="uuu"></property> <property name="age" value="15"></property> </bean> <bean id="user1" class="com.baidu.test.User"> <property name="name" value="uuu"></property> <property name="age" value="#{user.getAge()+5}"></property> </bean> <bean id="UserService" class="com.baidu.test.UserServiceImp"> <property name="name" value="uu"></property> <property name="u" value="#{user1}"></property> </bean>
以上是关于spring配置Bean的主要内容,如果未能解决你的问题,请参考以下文章