首页 > 其他分享 >sping-10

sping-10

时间:2024-07-05 10:29:08浏览次数:22  
标签:装配 10 beanB Spring sping Bean bean 注解

什么是 bean 装配

     

在Java中,bean装配是一种将对象(也称为bean)与其他对象之间建立关联关系的方法。这种装配可以通过手动编写代码来实现,也可以使用依赖注入框架(如Spring)来自动完成。

在bean装配中,有三种主要的方式:构造函数注入、setter方法注入和自动装配。

  1. 构造函数注入:通过在构造函数中传入依赖对象来建立关联关系。代码示例:
public class BeanA {
    private BeanB beanB;

    public BeanA(BeanB beanB) {
        this.beanB = beanB;
    }
}

public class BeanB {
    // ...
}

// 装配代码
BeanB beanB = new BeanB();
BeanA beanA = new BeanA(beanB);

  1. setter方法注入:通过调用bean的setter方法来设置依赖对象。代码示例:
public class BeanA {
    private BeanB beanB;

    public void setBeanB(BeanB beanB) {
        this.beanB = beanB;
    }
}

public class BeanB {
    // ...
}

// 装配代码
BeanB beanB = new BeanB();
BeanA beanA = new BeanA();
beanA.setBeanB(beanB);

  1. 自动装配:使用依赖注入框架来自动建立关联关系。代码示例:
public class BeanA {
    private BeanB beanB;

    public void setBeanB(BeanB beanB) {
        this.beanB = beanB;
    }
}

public class BeanB {
    // ...
}

// 在Spring配置文件中声明bean
<bean id="beanA" class="com.example.BeanA" autowire="byName"/>

<bean id="beanB" class="com.example.BeanB"/>

// 装配由Spring自动完成
BeanA beanA = applicationContext.getBean("beanA", BeanA.class);

解释不同方式的自动装配

  1. 默认的自动装配(default autowiring):Spring会根据属性名称和bean的名称来自动装配。如果一个bean的属性名称与另一个bean的名称相匹配,那么Spring会自动将这个bean注入到属性中。

  2. 根据类型自动装配(by type autowiring):Spring会根据属性类型来自动装配。如果一个bean的属性类型与另一个bean的类型匹配,那么Spring会自动将这个bean注入到属性中。如果有多个bean的类型匹配,Spring会抛出异常。

  3. 根据构造函数自动装配(by constructor autowiring):Spring会根据构造函数的参数类型来自动装配。如果一个bean的构造函数的参数类型与另一个bean的类型匹配,那么Spring会自动将这个bean注入到构造函数中。如果有多个bean的类型匹配,Spring会抛出异常。

可以通过在bean的定义中使用@Autowired注解来实现自动装配。例如,在默认的自动装配中,可以使用@Autowired注解在属性上进行标记,让Spring自动注入该属性。在根据类型自动装配和根据构造函数自动装配中,可以使用@Autowired注解在构造函数参数上进行标记,让Spring自动注入该参数。

另外,可以使用@Qualifier注解指定特定的bean进行注入,以解决多个bean类型匹配的问题。还可以使用@Primary注解指定一个首选的bean进行注入。

可以在 Spring 中注入一个 null 和一个空字符串

      

在Spring中,可以注入一个null和一个空字符串。

要注入null,可以使用@Autowired(required=false)注解。这将告诉Spring不要求该依赖项必须存在,即允许注入null。例如:

@Autowired(required=false)
private SomeBean someBean;

要注入一个空字符串,可以使用@Value注解,并将空字符串作为属性值。例如:

@Value("")
private String emptyString;

这样,Spring将会将一个空字符串注入到该属性中。

需要注意的是,如果使用@Value注解注入一个空字符串时,该属性必须是一个字符串类型。如果属性是一个对象类型,则无法注入一个空字符串,而只能注入null。

总结 

  1. XML配置文件装配:使用XML配置文件来定义Bean的装配方式。我们使用<bean>元素来定义一个Bean,指定其类名、属性、构造函数参数等信息。

  2. 注解装配:使用注解来标记Bean的装配方式。Spring提供了多种注解,包括@Component、@Service、@Repository、@Controller等,我们可以根据实际需要选择合适的注解进行装配。

  3. Java配置类装配:使用Java配置类来定义Bean的装配方式。我们可以创建一个Java类,使用@Configuration注解标记为配置类,然后使用@Bean注解来定义Bean的创建方式和依赖关系。

  4. 自动装配:Spring容器可以根据Bean之间的依赖关系自动进行装配。我们可以使用@Autowired注解来标记需要自动装配的属性或构造函数参数,Spring容器会自动查找合适的Bean进行装配。

  5. 基于接口的装配:Spring容器可以使用接口来装配Bean对象。我们可以使用@Autowired注解和接口类型来声明需要装配的Bean对象,Spring容器会自动查找实现了该接口的Bean进行装配。

  6. 条件装配:Spring容器可以根据条件来进行装配。我们可以使用@Conditional注解来定义一个条件,只有满足该条件时才会装配对应的Bean。

  7. 延迟装配:Spring容器可以延迟装配Bean对象,即只有在需要使用Bean时才进行实例化和装配。我们可以使用@Lazy注解来标记一个Bean需要延迟装配。

    

标签:装配,10,beanB,Spring,sping,Bean,bean,注解
From: https://blog.csdn.net/Flying_Fish_roe/article/details/140065249

相关文章

  • 【OpenVINO™】YOLOv10在CPU上也能实现50+FPS推理—使用OpenVINO C++部署YOLOv10
    ​英特尔发行版OpenVINO™工具套件基于oneAPI而开发,可以加快高性能计算机视觉和深度学习视觉应用开发速度工具套件,适用于从边缘到云的各种英特尔平台上,帮助用户更快地将更准确的真实世界结果部署到生产系统中。YOLOv10是清华大学研究人员近期提出的一种实时目标检测方法,......
  • 海思SD3403/SS928V100开发(14)WIFI模块RTL8821驱动调试
    1.前言芯片平台:海思SD3403/SS928V100操作系统平台:Ubuntu20.04.05【自己移植】WIFI模块:LB-LINK的RTL88212. 调试记录参考供应商提供的操作手册2.1lsusb查看设备2.2编译供应商提供的驱动2.2.1修改Makefile2.2.2编译报错解决办法:将Makefile中arm改成ar......
  • 【YOLOv10改进 - 注意力机制】 MHSA:多头自注意力(Multi-Head Self-Attention)
    YOLOv10目标检测创新改进与实战案例专栏专栏链接:YOLOv10创新改进有效涨点介绍摘要我们介绍了BoTNet,这是一个概念简单但功能强大的骨干架构,将自注意力引入多个计算机视觉任务,包括图像分类、物体检测和实例分割。通过仅在ResNet的最后三个瓶颈块中用全局自注意力替换......
  • [题解]P1083 [NOIP2012 提高组] 借教室
    [题解]P1083[NOIP2012提高组]借教室解法\(1\):线段树-\(O((n+m)\logn)\)比较直观的一种做法,但是可能需要卡一下输入(这里没卡也过了,但要注意输入是\(10^6\)级的,为了保险一定要加)。#include<bits/stdc++.h>#definelc(x<<1)#definerc((x<<1)|1)#defineintlonglong......
  • 顶级10大AI测试工具
      每周跟踪AI热点新闻动向和震撼发展想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领域的领跑者。点击订阅,与未来同行!订阅:https://......
  • Python从0到100(三十三):xpath和lxml类库
    1.为什么要学习xpath和lxmllxml是一款高性能的PythonHTML/XML解析器,我们可以利用XPath,来快速的定位特定元素以及获取节点信息2.什么是xpathXPath,全称为XMLPathLanguage,是一种用于在XML文档中进行导航和数据提取的语言,可用来在HTML\XML文档中对元素和属性进行遍......
  • UE插件与云渲染:10个提升效率的选择
    UnrealEngine(虚幻引擎)的插件生态丰富多样,从提升视觉效果到优化工作流程,为开发者提供了无限扩展的可能。本文推荐10款备受欢迎的插件,助你激发创意,提升开发效率.一、地牢建筑师:程序化关卡生成器价格:$299.99支持平台:Windows,MacOS,Android地牢建筑师是一款创新的程序化关卡设......
  • 《DNK210使用指南 -CanMV版 V1.0》第九章 打印输出实验
    第九章打印输出实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)正点原子......
  • SpingMvc-Day02
    SpringMVC:表述层作用:1.接受前端参数[SpringMVC简化] 2.调用业务逻辑 3.响应前端数据[SpringMVC简化]SpringMVC组件: 1.DispatcherServlet:处理全部请求 2.handlerMapping:缓存handler方法和地址 3.handlerAdapter:适配器、参数和相应简化 4.ViewResovler视图解释器:查找视图页面......
  • 深度学习怎么学?10步快速入门深度学习
    前言深度学习是一个快速发展的领域,不断更新的技术和方法需要持续的学习和适应。学习深度学习需要不断学习和实践,以及积极参与社区和领域内的讨论。深度学习怎么学?学习深度学习需要一定的时间、资源和方法。以下是学习深度学习的一些建议步骤:学好基础数学:深度学习需要一......