1. Bean对象的生命周期: 一个作用域,一个创建流程来分。
2. Bean的作用域:
Singleton:默认,单例,在一个容器中是唯一的。
Prototype:原型,也叫多例,每次从容器中获取时,重新创建新的对象。(Action就是prototype);
Request: 在一个请求范围内有效。
Session: 在一个会话范围内有效。
Application:在一个应用范围中均有效,相当于ServletContext。
Global session:只在porlet中有效。
3. Autowiring 自动装配:
- Default:不使用自动装配
<bean id="userDao" class="cn.wh.dao.impl.UserDaoImpl"/> <bean id="userService" class="cn.wh.service.impl.UserServiceImpl" autowire="default"> <property name="userDao" ref="userDao"></property> </bean>
- ByName:根据属性名到容器查找是否在和属性名相同的bean,如果找到那么自动装配
<bean id="userDao" class="cn.wh.dao.impl.UserDaoImpl"/> <bean id="userService" class="cn.wh.service.impl.UserServiceImpl" autowire="byName"> </bean>
- ByType:根据属性的类型,到容器中查找相同类型bean对象,如果找到那么直接装配,如果有两个相同类型的对象就会报错
<bean id="userDao" class="cn.wh.dao.impl.UserDaoImpl"/> <bean id="userService" class="cn.wh.service.impl.UserServiceImpl" autowire="byType"> </bean>
- Constructor:根据构造方法参数的类型自动注入,指定类型中要有对应的构造器。
public class UserServiceImpl implements UserService{ private UserDao userDao; public UserServiceImpl(UserDao userDao) { super(); this.userDao = userDao; } @Override public void save() { userDao.save(); } public void setUserDao(UserDao userDao) { this.userDao = userDao; } }
配置:
<bean id="userDao" class="cn.wh.dao.impl.UserDaoImpl"/> <bean id="userService" class="cn.wh.service.impl.UserServiceImpl" autowire="constructor"> </bean>
使用自动装配需要在bean的配置,比较麻烦,可以设置全局的自动装配类型:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="byName">