spring bean的作用域和自动装配
1 Bean的作用域
- l singleton单列:整个容器中只有一个对象实例,每次去访问都是访问同一个对象 默认是单列
- l prototype原型: 每次获取bean都产生一个新的对象,比如Action
- l request:每次请求时创建一个新的对象
- l session:在会话的范围内是一个对象,http那个session
- l global session:只在portlet下有用,表示application
- l application:在应用范围内有效
注意:配置action的时候注意设置bean作用域为scope=”prototype”,其他不常用。
2 Bean自动装配---简化spring配置文件
在配置bean时,可以配置bean的autowire属性,用于指定装配类型
//下面代码中的类的创建见spring IOC
// no不使用自动装配 //byName根据名称(set方法名首字母小写)去查找相应的bean,如果有则装配上去 <bean name=userDao" class="com.silvan.dao.impl.UserDaoOracleImpl" /> <bean name="userService" class="com.silvan.service.impl.UserServiceImpl" autowire="byName"/> //使用bean public void setUserDao(UserDao userDao) { this.userDao = userDao; } // byType根据类型进行自动装配 不用管bean的id或name 但是同类型的bean只能有一个 建议慎用。其中UserDaoMySqlImpl属于UserDao子类型,所以会被自动装配 <bean class="com.silvan.dao.impl.UserDaoMySqlImpl"/> <bean name="userService" class="com.silvan.service.impl.UserServiceImpl" autowire="byType"/> //根据类型判断使用哪个bean public void setUserDao(UserDao userDao) { this.userDao = userDao; }
可以配置全局的自动装配类型,在头部default-autowire
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="byName">
推荐不使用自动装配,而使用annotation。