栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring自动注入,类型注入、名称注入(两种方式)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring自动注入,类型注入、名称注入(两种方式)

一、 Spring的三种注入方式

1、构造器注入
2、setter注入
3、注解(@Autowired、@Resource、@Qualifier )

二、为什么要用自动注入?

因为在bean很多或者自定义的类很多的情况下,就需要在xml文件中一直写bean并且还要将每一个属性set(构造方法)入参的方式引入bean里面,这样的耦合性变高,后期也不容易进行维护

三、类属性注入到Spring容器中有几种方式?

@Autowired 按类型注入 Spring自己的注解,是自动注入,自动从spring的上下文找到合适的bean来注入
@Resource用来指定Bean名称注入,javaEE的,Spring也支持,建议使用整个,全球通用的
@Qualifier (和Autowired配合使用,指定bean的名称)

四、Bean容器的相关注解?

1、@Autowired

@Autowired
顾名思义,就是自动装配,其作用就是为了消除代码java代码里面的getter/setter与bean属性中的property.
@Autowired
默认按类型匹配的方式,当Spring发现@Autowired注解时,就自动在代码上下文中找到其匹配的Bean,当仅有一个匹配的Bean时,Spring将其注入@Autowire标注的变量中。

2、@Qualifier(指定Bean名称注入)

@Qualifier 就是 autowire=byName, @Qualifier
通常和@Autowired一起使用,一般在两个或者多个bean是相同的类型时,spring注入会出现混乱,就需要使用
@Qualifier(“xxBean”) 来指定Bean的名称。

  • 例如
    定义一个Car接口,两个实现类BMWCar和BenzCar:
    再写一个CarFactory,引用car(这里先不用@Qualifier注解):
    Car接口有两个实现类,Spring并不知道应当引用哪个实现类。
通常有两种解决办法:

(1) 在配置文件中删除其中一个实现类,Spring会自动去base-package下寻找Car接口的实现类,发现Car接口只有一个实现类,便会直接引用这个实现类。
(2) 实现类就是有多个该怎么办?此时可以使用@Qualifier注解来指定Bean的名称

@Autowired
@Qualifier("bmwCar")
private ICar car;

此处会注入名为"bmwCar"的Bean。

3. @Resource

@Resource(name="tiger")
private Tiger tiger;

@Resource(type=Monkey.class)
private Monkey monkey;

@Resource的装配顺序:

(1) @Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配 (2)
指定了name或者type则根据指定的类型去匹配bean (3)
指定了name和type则根据指定的name和type去匹配bean,任何一个不匹配都将报错

@Resource 与 @Autowired 的区别:

(1) @Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配
(2) @Autowired是Spring的注解,@Resource是J2EE的注解,这个看一下导入注解的时候这两个注解的包名就一清二楚了,Spring属于第三方的,J2EE是Java自己的东西,因此,建议使用@Resource注解,以减少代码和Spring之间的耦合。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/306932.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号