目录
bean的实例化补充:
前言:上一章节我们最后学习了bean的实例化,这里我们补充一下未提及的实例工厂。
实例工厂:

配置:

了解即可,下面我们重点学习Factorybean
public class UserDaoFactoryBean implements FactoryBean<UserDao>/1代替原始实例工厂中创建对象的方法public UserDao getObject() throws Exception {return new UserDaoImpl();
}
public Class<?> getobjectType() {return UserDao.class};
配置:<!--方式四:使用FactoryBean实例化bean-->
<bean id="userDao" class="com.itheima.factory.UserDaoFactoryBean
beans>
务必要掌握,后面框架整合的时候需要用到。
bean的生命周期:
++初始化容器
创建对象(内存分配)
执行构造方法
执行属性注入(set操作)
执行bean初始化方法
使用bean
1.执行业务操作
关闭/销毁容器
1.执行bean销毁方法++
bean销毁时机
容器关闭前触发bean的销毁
关闭容器方式:
手工关闭容器
ConfigurableApplicationContext接口close()操作
注册关闭钩子,在虚拟机退出前先关闭容器再退出虚拟机
ConfigurableApplicationcontext接口registerShutdownHook()操作
依赖注入的方式:
向一个类中传递数据是依赖方法的,有两种方法,一种是++构造方法,另一种是普通方法++ (set方法),同时依赖注入描述了在容器中建立bean与bean之间依赖关系的过程(在本类中需要其他类的对象),如果bean运行需要的数字或者是字符串呢。所以我们又分为++引用类型和简单类型。++
综上所述,我们最终列出依赖注入的几种方式:
setter注入(简单类型)
在bean中定义引用类型属性并提供可访问的set方法:
public class BookDaoImpl implements BookDao {private int connectionNumber;public void setConnectionNumber(int connectionNumber) {this.connectionNumber = connectionNumber;
配置中使用property标签value属性注入简单类型数据:
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"><property name="connectionNumber" value="10"/></bean>
setter注入(引用类型)
在bean中定义引用类型属性并提供可访问的set方法:
public class BookServiceImpl implements BookService{private BookDao bookDao;public void setBookDao(BookDao bookpao){this.bookDao = bookDao;}
配置中使用property标签ref属性注入引用类型对象:
:<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"><property name="bookDao" ref="bookDao"/></bean>
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
构造器注入简单类型
在bean中定义引用类型属性并提供可访问的构造方法:
public class BookServiceImpl implements BookService{private BookDao bookDao;
public BookServiceImpl(BookDao bookDao) {this.bookDao = bookDao;
配置中使用constructor-arg标签ref属性注入引用类型对象
构造器注入引用类型
同上。
配置中使用constructor-arg标签value属性注入简单类型数据。
依赖注入方式选择
1.强制依赖使用构造器进行,使用setter注入有概率不进行注入导致nul1对象出现
2.可选依赖使用setter注入进行,灵活性强
3.Spring框架倡导使用构造器,第三方框架内部大多数采用构造器注入的形式进行数据初始化,相对严谨如果有必要可以两者同时使用,使用构造器注入完成强制依赖的注入,使用setter注入完成可选依赖的注入
4.实际开发过程中还要根据实际情况分析,如果受控对象没有提供setter方法就必须使用构造器注入
5.自己开发的模块推荐使用setter注入
依赖自动装配
配置中使用bean标签autowire属性设置自动装配的类型
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl" autowire="byType"/>
依赖自动装配特征
自动装配用于引用类型依赖注入,不能对简单类型进行操作
使用按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用使用按名称装配时(byName)必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效
注入集合对象
注入数组对象:
<property name="array">
<anray>
<value>100</value>
<value>200</value>
<value>300</value>
</array>
</property>
注入List对象(重点):
<property name="list">
<list>
A<value>itcast</value><value>itheima</value><value>boxuegu</value>
</list>
</property>
注入Set对象:
<property name="set">
<set>
<value>itcast</value><value>itheima</value>
<value>boxuegu</value>
</set>
</property>
注入Map对象(重点)
<property name="map">
<map>
<entry key="country" value="china"/><entry key="province" value="henan"/><entry key="city" value="kaifeng"/>
</map>
</property>
注入Properties对象
<property name="properties"><props>
<prop key="country">china</prop><prop key="province">henan</prop><prop key="city">kaifeng</prop>
</props>
</property>
管理第三方资源
前面我们学习的都是管理自己创建的类,bean对象,下面我们学习如何Spring管理第三方资源配置管理
导入坐标
配置数据源对象作为spring管理的bean
加载properties文件:
开启context命名空间:

使用context命名空间加载指定properties文件

使用¥{}加载导入的属性值


创建容器
方式一:类路径加载配置文件
ApplicationContext ctx = new ClassPathxmlApplicationContext("applicationcontext.xml");
方式二:文件路径加载配置文件
Applicationcontext ctx = new FileSystemXmlApplicationcontext( "D: \\applicationcontext.xml");加载多个配置文件
ApplicationContext ctx = new ClassPathxmlApplicationContext("bean1.xml", "bean2.xml");
获取bean
方式一:使用bean名称获取BookDao bookDao = (BookDao) ctx.getBean("bookDao");方式二:使用bean名称获取并指定类型BookDao bookDao = ctx.getBean("bookDao",BookDao.class);方式三:使用bean类型获取BookDao bookDao = ctx.getBean(BookDao.class);


容器总结:
BeanFactory是IoC容器的顶层接口,初始化BeanFactory对象时,加载的bean延迟加载
ApplicationContext接口是Spring容器的核心接口,初始化时bean立即加载ApplicationContext接口
提供基础的bean操作相关方法,通过其他接口扩展其功能
ApplicationContext接口常用初始化类
ClassPathXmlApplicationContext
FileSystemXmlApplicationContext
