当前位置: 首页 > ops >正文

Spring框架学习day2--Bean管理(IOC)

  • Spring如何进行Bean管理(IOC)
    • 方式1:基于xml(spring.xml)
      • 依赖注入
    • 方式2:基于注释(常用)
      • 方法1:**@Autowired**
      • 方法2: **JDK 注解@Resource 自动注入**
      • **注解与 XML 的对比**

Spring如何进行Bean管理(IOC)

文件结构:

image-20250529224342397

方式1:基于xml(spring.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"><!--配置哪些类需要spring框架进行管理id:指定对象的唯一标识符name:指定对象的别名class:指定对象的全类名scope:指定对象的作用域,默认是singleton,表示对象在整个spring容器中只有一个实例,并且是在spring容器启动时创建的,还可以设置为prototype,表示每次请求时都会创建一个新的实例-->
<bean id="admin" class="org.example.model.Admin" scope="singleton"></bean>
</beans>

依赖注入

在spring创建对象时,为对象中的属性进行赋值,有的属性值可能来源于另一个对象。

1.set方法注入

<bean id="admin" class="org.example.model.Admin" scope="singleton"><property name="id" value="1"/><property name="account" value="admin"/><property name="password" value="123456"/></bean>

image-20250529182331258

2.构造方法(有参构造)

<bean id="admin" class="org.example.model.Admin" scope="singleton"><constructor-arg value="1"/><constructor-arg value="admin"/><constructor-arg value="123456"/></bean>

image-20250529182411882

案例1:

<bean id="adminDao" class="org.example.Dao.AdminDao" scope="singleton"></bean><bean id="adminSeverlet" class="org.example.web.AdminSeverlet"><property name="adminDao" ref="adminDao"/>
<!--        ref:表示引用其他bean的id--></bean>

ref表示引用其他bean的id

image-20250529183822905

方式2:基于注释(常用)

开启注解扫描

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/tx
">
<!--        开启注解扫描  对指定包下的注解进行扫描 ,检查添加spring类注解标签的类-->
<context:component-scan base-package="org.example.model" ></context:component-scan></beans>

在对应类上面加注解标签

image-20250529185313885

加上命名相当于 id="adminSeverlet"

image-20250529185404958

当然还有其他属性

image-20250529185523828

image-20250529190326554

@Repository					数据访问相关的类
@Component					模型类的注解标签

在类里面引用其他类

案例:在AdminSeverlet里面调用AdminDao

image-20250529190512383

注解创建对象

@Component(value=“user”)等同于 < bean id=“user” class=“”>< /bean>

@Service

@Repository 以上注解都可以实现创建对象功能,只是为了后续扩展功能,在不同的层使用不 同的注解标记

@Scope(value=“prototype”) 原型

@Scope(value=“ singleton ”) 单例

注解方式注入属性【DI:DependencyInjection】

方法1:@Autowired

@Autowired 是Spring 提供的注解,可以写在字段和setter方法上。如果写在 字段上,那么就不需要再写setter方法。默认情况下它要求依赖对象必须存在, 如果允许null值,可以设置它的required属性为false。

byType 自动注入

该注解默认使用按类型自动装配 Bean 的方式。

byName

自动注入 如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起 使用。

需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier 的 value 属性用于指定要匹配的 Bean 的 id 值。

方法2: JDK 注解@Resource 自动注入

Spring 提供了对 jdk中@Resource注解的支持。@Resource 注解既可以按名 称匹配Bean,也可以按类型匹配 Bean。默认按照ByName自动注入

byName 注入引用类型属性

@Resource 注解指定其 name 属性,则 name 的值即为按照名称进行匹配 的 Bean 的 id。

注解方式的注入*   方式一:使用@Autowired注解,根据类型自动装配*           可以添加到要注释的属性上面,或者属性的set方法上,如果直接在属性上,那么set方法可以省略*         默认情况下,@Autowired(required=true)注解,如果没有找到bean,会抛出异常*         注入时,查找bean方式有两种*           1.通过对象名字直接查找,需要使用@Qualifier("name")*           2.通过类型查找,如果有多个相同类型的bean,会抛出异常,需要使用@Primary注解指定一个bean*            @Repository 不需要()里面命名*  方式二:使用@Resource注解,根据名称自动装配,如果没有找到bean,会抛出异常*         注入时,查找bean方式有两种*           1.通过对象名字直接查找,需要使用@Name注解*           2.通过类型查找,如果有多个相同类型的bean,会抛出异常,需要使用@Priority注解指定一个bean

注解与 XML 的对比

注解优点: 方便,直观,高效(代码少,没有配置文件的书写那么复杂)。

注解缺点:以硬编码的方式写入到 Java 代码中,修改是需要重新编译代码的。

xml 优点是: 配置和代码是分离的,在 xml 中做修改,无需编译代码,只需重 启服务器即可将新的配置加载。

xml 的缺点是:编写麻烦,效率低,大型项目过于复杂

http://www.xdnf.cn/news/9665.html

相关文章:

  • 【博客系统】博客系统第十一弹:部署博客系统项目到 Linux 系统
  • Elasticsearch集群管理的相关工具介绍
  • [Rust_1] 环境配置 | vs golang | 程序运行 | 包管理
  • 自定义异常小练习
  • Intellij IDEA 查找接口实现类的快捷键
  • CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
  • 数据可视化(第4、5、6次课)
  • 【Java Web】速通JavaScript
  • k8s pod启动失败问题排查
  • NanoGPT的BenchMarking.py
  • 数据治理是什么意思?数据治理平台有哪些?
  • 如何使用.Net Reactor 批量加密 DLL
  • PostgreSQL 备份与恢复策略
  • docker网络相关内容详解
  • Java开发经验——阿里巴巴编码规范实践解析7
  • Axure设计案例——科技感立体柱状图
  • 动态规划-931.下降路径最小和-力扣(LeetCode)
  • 高光谱成像相机:基于高光谱成像技术的玉米种子纯度检测研究
  • 华为OD机试真题——阿里巴巴找黄金宝箱(II)(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 小程序 - 视图与逻辑
  • MySQL的基本架构
  • 社群分享:义乌|杭州电商|店群卖家,私域鱼塘运营的排单系统开源|私域鱼塘运营|返款软件开源
  • Typora-macOS 风格代码块
  • Kotlin Multiplatform与Flutter深度对比:跨平台开发方案的实战选择
  • ZYNQ sdk lwip配置UDP组播收发数据
  • ICECEPSS 2025:节能环保与社会治理的融合之道
  • Windows系统安装MySQL Connector 使用C++ VS2022连接MySQL
  • 吉林大学操作系统上级实验四(hash存储讲解及顺序存储文件管理实现)
  • 【LangChain】框架解析
  • LVS-DR高可用-Keepalived