首页>>后端>>Spring->浅析@Autowired通过ByName和ByType注入的流程和场景

浅析@Autowired通过ByName和ByType注入的流程和场景

时间:2023-11-29 本站 点击:1

在看Spring源码时发现@Autowire有两种注入方式,一个是byType,一个是byName,其中byType是默认的,但是他不是唯一,当一个bean有多个beanId时,会报错,这时就需要指定这个类时由beanId来实现,就要使用byName了。

我们通过项目实例来了解下

定义MailConfig类

publicclassMailConfig{privateStringsubject;privateStringfrom;privateStringtext;privateStringreplyTo;privatebooleanhtml;-----

通过配置文件将MailConfig注册到spring Bean,并指定bean id

<beanid="CommonRegBillMail"class="com.sunisco.par.service.listener.MailConfig"><propertyname="from"value="web@sunisco.com"/><propertyname="replyTo"value="web@sunisco.com"/><propertyname="html"value="true"/><propertyname="text"><value><![CDATA[尊敬的客户:#context##url##customer_code##orgpwd##footer#]]></value></property></bean><beanid="paymentVerificationImportEmailConfig"class="com.sunisco.par.service.listener.MailConfig"><propertyname="from"value="web@sunisco.com"/><propertyname="replyTo"value="web@sunisco.com"/><propertyname="html"value="true"/><propertyname="text"><value><![CDATA[尊敬的客户#userCode#:#context#]]></value></property></bean>

这里我们看到MailConfig类对应了两个bean id 一个是CommonRegBillMail,一个是paymentVerificationImportEmailConfig

@Autowired注入依赖

如果这时使用

@AutowiredprivateMailConfigconfig;

就会报错,因为程序不知道是使用CommonRegBillMail还是paymentVerificationImportEmailConfig对应的配置,这时就要用byName的方式

@Autowired@Qualifier("CommonRegBillMail")privateMailConfigconfig;

byName的方式使用了 @Qualifier注解,他的作用就是根据参数进行依赖查找,从而实现功能。这时就不会报错了。

依赖使用

MimeMessageHelperhelper=newMimeMessageHelper(message,true,Charsets.UTF_8.name());helper.setFrom(config.getFrom());-------

以上就是 @Autowired通过ByName和ByType注入的流程和场景,如果想深入了解底层实现原理,推荐查看《Spring源码深度解析》第117页中两种注入方式的源码实现。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Spring/286.html