首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SSM从入门到入土(Spring Bean实例化与依赖注入全解析)

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

作者头像
北极的代码
发布2026-04-22 18:56:36
发布2026-04-22 18:56:36
730
举报

目录

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • bean的实例化补充:
    • bean的生命周期:
      • bean销毁时机
  • 依赖注入的方式:
    • setter注入(简单类型)
    • setter注入(引用类型)
    • 构造器注入简单类型
    • 构造器注入引用类型
  • 依赖注入方式选择
    • 依赖自动装配
      • 依赖自动装配特征
      • 注入集合对象
    • 管理第三方资源
  • 创建容器
    • 容器总结:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档