itheima-SSM 学习笔记
Day1 Spring-Bean相关知识
1.bean基础配置
<bean id="bookDao" name="dao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="bookService" name="service" class="com.itheima.service.impl.BookServiceImpl">
<!-- property标签表示当前bean的属性-->
<!-- name属性表示配置哪一个具体属性 此处是BookServiceImpl中的bookDao-->
<!-- ref属性表示参照哪一个bean 此处是上面com.itheima.dao.impl.BookDaoImpl的id bookDao-->
<property name="bookDao" ref="bookDao"/>
</bean>
可以通过name给bean起别名。
可以用property标签表示当前bean的属性,个人理解是把IOC里面的两个bean关联起来,service里面要使用dao层里面的bean所以service的ref为dao层的bean。
2.bean的三种实例化方式
(1)构造方法(常用)
- 提供可访问的构造方法
Public class BookDaoImpl implements BookDao {
<!--public BookDaoImpl() {}-->
public void save() {
System.out.println("save...");
}
}
- 配置
<bean
id = "bookDao"
class = "com.itheima.dao.impl.BookDaoImpl"
/>
bean实例化对象采用构造方法。
并且不论是public的构造方法还是private构造方法,它都能调到。(通过反射访问私有构造方法)
但是它只能通过无参构造方法实例化对象。
无参构造方法如果不存在,将抛出BeanCreationException。
(2)静态工厂(了解)
- 静态工厂
Public class OrderDaoFactory {
public static orderDao getOrderDao() {
return new orderDaoImpl;
}
}
- 配置
<bean
id = "orderDao"
class = "com.itheima.factory.orderDaoFactory"
factory-method = "getOrderDao"
/>
其中class为工厂类名,还需要配工厂里面造对象的方法名factory-method。
(3)实例工厂(了解)
- 实例工厂
Public class UserDaoFactory {
public userDao getUserDao() {
return new userDaoImpl;
}
}
- 配置
<!--先配置工厂的bean-->
<bean id = "userDaoFactory" class = "com.itheima.factory.UserDaoFactory" />
<!--再配置工厂的bean里面的method-->
<bean
id = "userDao"
factory-bean = "userDaoFactory"
factory-method = "getUserDao"
/>
(3*)实例工厂变种-FactoryBean(重要,实用)
- FactoryBean
Public class UserDaoFactoryBean implements FactoryBean<UserDao>{
<!--代替原始实例工厂中创建对象的方法-->
public userDao getObject() throws Exception {
return new userDaoImpl;
}
public Class<?> getObjectType() {
return userDao.class;
}
}
- 配置 (相对于实例工厂,配置得到了简化)
<bean
id = "userDao"
clasd = "com.itheima.factory.UserDaoFactoryBean"
/>
还可以通过实现isSingleton()方法来控制,
默认为单例模式
return false;表示非单例模式
return true;表示单例模式
public boolean isSingleton() {
return false;
}
3.bean的生命周期
执行结果:(先set 后service init)
4.setter注入