首页 > 其他分享 >Spring byName和byType两种注入方式;@Resource和@Autowired

Spring byName和byType两种注入方式;@Resource和@Autowired

时间:2023-11-02 11:35:15浏览次数:35  
标签:装配 byType set Resource Autowired byName 注入

Spring

控制翻转IOC 可以理解为一个类, 依赖注入可以理解为一个对象

控制反转(IoC)是一个通用的概念,它可以用许多不同的方式去表达,依赖注入仅仅是控制反转的一个具体的例子。

依赖注入的2种方法

1、构造函数依赖注入

2、setter方法依赖注入

自动装配分为3种:( Spring的byType、byName的自动装配逻辑以及@Autowired和@Resource的使用示例 - 简书 (jianshu.com)

1、byName

很多人以为,byName的自动装配是跟类中的属性有关,其实不是,使用byName进行自动装配时,是利用Java的反射机制获取自动装配类中的set方法名去掉set后将其首字母小写再到IOC容器中查找是否有对应的beanId,如果有则查看该bean的类型与set方法的参数类型是否匹配,匹配上了则调用set方法进行 依赖注入。因此,byName的自动装配跟set方法名和参数类型有关,跟属性名无关。

2、byType

使用byType进行自动装配时,是利用Java的反射机制获取测试类中的set方法的参数类型,寻找此接口类型的实现类或子类,找到后将其首字母小写与IOC容器中的beanId进行匹配,匹配成功后则调用set方法进行依赖注入。因此,byType自动装配与方法名无关,与属性名无关,与set方法的参数类型有关

3、由构造函数自动装配

@Resource

默认按照byName方式注入,如果找不到则按照byType方式注入

@Resource放在属性上,如果不写对应的set方法,则程序在运行时,Java的反射机制会自动的帮我们生成一个名为set方法

@Resource放在set方法上,按照set方法的名称(去掉set后将其首字母小写)作为beanId进行注入。例如,下面的setHelloWorld123方法对应的beanId为helloWorld123

@Resource
public void setHelloWorld123(HelloWorld helloWorld) {
    this.helloWorld = helloWorld;
}

同时使用xml配置bean和注解配置bean,如果beanId相同,则IOC容器中只会有一个bean

@Autowired

默认按照byType方式注入,如果存在多个Type相同的bean,则按照byName方式注入

spring中如何xml配置文件和注解同时存在,xml配置文件的优先级高于注解

标签:装配,byType,set,Resource,Autowired,byName,注入
From: https://www.cnblogs.com/cumter/p/17805020.html

相关文章

  • springboot Filter @Resource 为空 、@Value 无法读取yml配置的问题
    问题1:在过滤器中使用@Resource为nullSpring中,web应用启动的顺序是:listener->filter->servlet,先初始化listener,然后再来就filter的初始化,再接着才到我们的dispathServlet的初始化,因此,当我们需要在filter里注入一个注解的bean时,就会注入失败,因为filter初始化时,注解的bean还没初......
  • Marine pollution resources
    MarinePollutionTheworld’smarinepollutioncomesinmanyforms–fromtoxicchemicals,sewageandfertiliserstoplastics,discardedfishingnetsandeventhenoisefromshippinganddrilling.Over80%ofitoriginatesfromland-basedactivities(WWF,......
  • 为什么Spring和IDEA不推荐使用@Autowired注解,有哪些替代方案?
    引言在使用Spring框架和JetBrainsIDEA集成开发环境(IDE)进行Java开发时,你可能经常会遇到@Autowired注解。@Autowired是Spring框架中用于实现依赖注入的核心注解之一。然而,近年来,Spring和IDEA都不再推荐使用@Autowired注解,并提出了更好的替代方案。本文将详细分析为什么Spring和IDE......
  • [spring学习]一定要写对resources 文件夹的名字,不然,即使正确设置了静态资源访问,仍
    今天遇到的问题,项目能启动,能访问正常的页面,只是静态资源没法访问好好检查过配置文件了,springmvc-config也正常的放行静态资源了就是访问不了最后,想重新创建项目的时候,突然意识到是文件夹名字的问题可以写configs或者resources,但是一定要写成带s的复数形式......
  • [Spring框架学习]SSM 整合,使用maven构建项目的时候,启动项目报错class path resource
    错误:classpathresource[config/spring/springmvc.xml]cannotbeopenedbecauseitdoesnotexist错误原因:找不到我的springmvc.xml,在下面web.xml中是我引用路径,网上找到问题classpath指向路径不是resource路径,所以一直找不到我的xml文件,classpath:到你的class路径......
  • @Resource注解
    @Resource注解是Java平台提供的注解,用于进行依赖注入。当你在类中的字段或属性上使用@Resource注解时,Java容器会自动为该字段或属性注入一个合适的Bean对象。@Resource注解可以标注在字段或属性的setter方法上。如果标注在字段上,则会自动注入与该字段类型相匹配的Bean对象。如果......
  • c# Winform中如何把图片添加到resources中
    我们在Winform项目中中需要插入图片资源,但是新建的项目中找不到Resources文件夹,怎么才能出现呢?1:双击项目下的Resources.resx,出现视图2:单击"添加资源",选择"添加现有文件",找到你要添加的图片,确定之后保存就可以了3:这时候你会发现视图中出现添加的图片,解决方案......
  • pytest运行警告问题解决:DeprecationWarning: pkg_resources is deprecated as an API
    前言最近在运行pytest的时候,经常出现这个警告DeprecationWarning:pkg_resourcesisdeprecatedasanAPISeehttps://setuptools.pypa.io/en/latest/pkg_resources.htmlfrompkg_resourcesimportiter_entry_points从警告上看是方法被弃用,肯定是因为新版弃用了旧版的语法。遇......
  • SpringBoot不再需要@Autowired来注入属性
    实操部分需要lombok依赖在对应需要注入属性的类上添加注解@RequiredArgsConstructor所有需要注入的属性改为final修饰为什么lombok的@RequiredArgsConstructor会生成一个有参(所有的用final修饰的属性)构造器spring的自动注入会直接根据有参构造器进行注入......
  • @Resource和@Autowired区别和用处
    @Autowired和@Resource都是用于依赖注入的注解,但是他们来自不同的“父类”,具有不同的基因。具体来说,@Autowired是Spring框架定义的注解,其功能主要通过Spring的IOC和AOP实现。而@Resource则是Java本身定义的注解,来自于JSR-250(Java250规范提案),需要JDK1.6及以上版本。这两种注解在......