
目录
bean的实例化补充:
bean的生命周期:
bean销毁时机
依赖注入的方式:
setter注入(简单类型)
setter注入(引用类型)
构造器注入简单类型
构造器注入引用类型
依赖注入方式选择
依赖自动装配
依赖自动装配特征
注入集合对象
管理第三方资源
创建容器
容器总结:
前言:上一章节我们最后学习了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>
务必要掌握,后面框架整合的时候需要用到。
初始化容器 创建对象(内存分配) 执行构造方法 执行属性注入(set操作) 执行bean初始化方法 使用bean 1.执行业务操作 关闭/销毁容器 1.执行bean销毁方法
容器关闭前触发bean的销毁 关闭容器方式: 手工关闭容器 ConfigurableApplicationContext接口close()操作 注册关闭钩子,在虚拟机退出前先关闭容器再退出虚拟机 ConfigurableApplicationcontext接口registerShutdownHook()操作
向一个类中传递数据是依赖方法的,有两种方法,一种是构造方法,另一种是普通方法(set方法),同时依赖注入描述了在容器中建立bean与bean之间依赖关系的过程(在本类中需要其他类的对象),如果bean运行需要的数字或者是字符串呢。所以我们又分为引用类型和简单类型。
综上所述,我们最终列出依赖注入的几种方式:
在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>
在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
