Spring学习一:spring-context之IOC/DI
本功能使用依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
IOC控制反转
将对象的创建权交给spring来完成,并存入spring容器,使用对象的时候只需要从容器中去拿。
创建Bean的三种方式
- 无参构造方法实例化
空参构造注入,则必须有空参构造器
- 工厂静态方法实例化(使用类中的方法创建对象,并存入spring容器)
场景:使用第三方的jar包,将第三方的对象初始化数据并存入容器
- 工厂普通方法实例化(使用类中的方法创建对象,并存入spring容器)
Bean的作用范围配置:scope属性
<bean id="userDao" class="com.it.dao.imp.UserDaoImpl" scope="prototype"></bean>
当scope的取值为singleton时(默认)
- Bean的实例化个数:1个
- Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例
- Bean的生命周期:
- 对象创建:当应用加载,创建容器时,对象就被创建了
- 对象运行:只要容器在,对象一直活着
- 对象销毁:当应用卸载,销毁容器时,对象就被销毁
当scope的取值为prototype时
- Bean的实例化个数:多个
- Bean的实例化时机:当调用getBean方法时实例化Bean
- Bean的生命周期:
- 对象创建:当使用对象时,创建新的对象实例
- 对象运行:只要对象在使用中,就一直活着
- 对象销毁:当对象长时间不用时,被java的垃圾回收器回收
Bean生命周期配置:init-method属性 和 destory-method属性
- init-method:指定类中的初始化方法
- destory-method:指定类中的销毁方法名称
DI依赖注入
依赖注入是spring框架核心IOC的具体实现。
在编写程序时,通过IOC把对象的创建交给spring,但是代码中不可能出现没有相互依赖的情况,IOC只是降低他们的依赖关系(例如业务层调用持久层的方法)。
业务层和持久层的依赖关系,在使用spring之后,就让spring来维护了。也就是坐等spring框架把持久层对象注入到业务层,而不用我们通过getBean()去获取。
-
Bean的注入
-
构造方法注入bean
-
set方法注入bean
-
-
普通数据注入
-
集合数据注入
引入其他配置文件(分模板开发)
不进行拆解的话,spring主配置文件将会非常的庞大。实际开发中,可以将部分配置拆解到其他配置文件中。在spring主配置文件中引入其他配置文件,使用import标签,当加载主文件时会一并加载其他配置文件。
spring相关api
- ApplicationContext:接口类型,代表应用上下文,可以通过其实例获取spring容器中的Bean对象。
- ApplicationContext的实现类:
- ClassPathXmlApplicationContext:从类路径下加载配置文件
- FileSystemXmlApplicationContext:从磁盘路径加载配置文件
- AnnotationConfigApplicationContext:使用注解配置容器对象时,需要此类来加载spring容器。它用来读取注解。
- getBean方法
-
源码:
-
使用:
注意:参数是Class类型,表示根据类型从容器中匹配Bean实例。但是,若容器中相同类型Bean存在多个,则该方法报错。
-
spring配置其他第三方Bean:如配置数据源(连接池)
<!--引入context命名空间-->
xmlns:context="http://www.springframework.org/schema/context"
<!--引入context约束路径-->
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
<!--加载外部的properties文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
spring注解开发
-
原始注解
spring原始注解主要是替代<Bean>的配置。
使用举例:
-
新注解
使用原始注解并不能完全代替xml配置。
使用举例:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!