SSM从入门到入土(Spring Bean实例化与依赖注入全解析)

目录

bean的实例化补充:

bean的生命周期:

bean销毁时机

依赖注入的方式:

setter注入(简单类型)

setter注入(引用类型)

构造器注入简单类型

构造器注入引用类型

依赖注入方式选择

依赖自动装配

依赖自动装配特征

注入集合对象

管理第三方资源

创建容器

容器总结:


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

相关推荐
long3161 小时前
Z算法(线性时间模式搜索算法)
java·数据结构·spring boot·后端·算法·排序算法
毕设源码-赖学姐1 小时前
【开题答辩全过程】以 基于Java web的宠物领养系统的设计与实现为例,包含答辩的问题和答案
java·开发语言·宠物
小小码农Come on1 小时前
QT常用控件:QListWidget
开发语言·qt
瑞雪兆丰年兮2 小时前
[从0开始学Java|第十三天]面向对象进阶(static&继承)
java·开发语言
小楼v2 小时前
如何实现AI生成应用部署功能
java·后端·ai·部署
望未来无悔2 小时前
系统学习算法 专题十九 优先级队列(堆)
java·算法
没有bug.的程序员2 小时前
Istio 服务网格:流量治理内核、故障注入实战与云原生韧性架构深度指南
spring boot·云原生·架构·istio·流量治理·故障注入·韧性架构
小虾米 ~2 小时前
JAVA引用类型
java·开发语言
星辰_mya2 小时前
Elasticsearch之中
java·服务器·数据库