bean配置
bean基础配置
名称:bean
类型:标签
所属:beans标签
功能:定义Spring核心容器管理的对象
格式:
<beans> <bean/> <bean></bean> </beans>
属性列表:
- id:bean 的 id,使用容器可以通过 id 值获取对应的 bean,在一个容器中 id 值唯一
- class:bean 的类型,即配置的 bean 的全路径类名
范例:
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" /> <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"></bean>
bean别名配置
名称:name
类型:属性
所属:bean标签
功能:定义bean的别名,可定义多个,使用逗号(,) 分号(;) 空格( ) 分隔
范例:
<bean id="bookDao" name="dao bookDaoImpl" class="com.itheima.dao.impl.BookDaoImpl"/> <bean name="service, bookServiceImpl" class="com.itheima.service.impl.BookServiceImpl" />
注意事项:
- 获取bean无论是通过 id 还是 name 获取,如果无法获取到,将抛出异常 NoSuchBeanDefinitionException
- NoSuchBeanDefinitonException: No bean named ‘bookServiceImpl’ available
bean作用范围说明
- 为什么bean默认为单例?
- 一般spring管理的都是复用的
- 适合交给容器进行管理的bean
- 表现层对象
- 业务层对象
- 数据层对象
- 工具对象
- 不适合交给容器进行管理的bean
- 封装实体的域对象
bean实例化
- bean本质上就是对象,创建bean使用构造方法完成
实例化bean的三种方式 —— 构造方法(常用)
提供可访问的构造方法
public class BookDaoImpl implements BookDao { public BookDaoImpl() { System.out.println("book dao constructor is running ......"); } @Override public void save() { System.out.println("book dao save"); } }
配置
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
无参构造方法如果不存在,将抛出异常BeanCreationException
实例化bean的三种方法 —— 静态工厂(了解)
静态工厂
public class OrderDaoFactory { public static OrderDao getOrderDao() { System.out.println("factory setup ..."); return new OrderDaoImpl(); } }
配置
<bean id="orderDao" class="com.itheima.factory.OrderDaoFactory" factory-method="getOrderDao"/>
实例化bean的三种方法 —— 实例工厂 (了解)
实例工厂
public class UserDaoFactory { public UserDao getUserDao() { return new UserDaoImpl(); } }
配置
<bean id="userFactory" class="com.itheima.factory.UserDaoFactory"/> <bean id="userDao" factory-method="getUserDao" factory-bean="userFactory"/>
实例化bean的第四种方式 —— FactoryBean
FactoryBean
public class UserDaoFactoryBean implements FactoryBean<UserDao> { //代替原始实例工厂创建对象的方法 @Override public UserDao getObject() throws Exception { return new UserDaoImpl(); } @Override public Class<?> getObjectType() { return UserDao.class; } }
配置
<bean id="userDao" class="com.itheima.factory.UserDaoFactoryBean"/>
总结
- 构造方法(常用)
- 静态工厂(了解)
- 实例工厂(了解)
- FactoryBean(实用)