A、@Autowired

org.springframework.beans.factory.annotation.Autowired

public @interface Autowired

Marks a constructor, field, setter method or config method as to be autowired by Spring's dependency injection facilities.

标注一个构造函数,字段,setter方法或者配置方法,让它通过spring的依赖注入方法自动装填。

Only one constructor (at max) of any given bean class may carry this annotation, indicating the constructor to autowire when used as a Spring bean. Such a constructor does not have to be public.

任何一个给定的bean类只能有一个构造函数可以携带这个注释,表示这个类作为一个spring的bean使用时,这个构造器将用于自动装配。这个构造函数不是必须是public。

Fields are injected right after construction of a bean, before any config methods are invoked. Such a config field does not have to be public.

在一个bean创建之后,任何方法被调用之前,这个字段被注入。这个字段不是必须是public。

Config methods may have an arbitrary name and any number of arguments; each of those arguments will be autowired with a matching bean in the Spring container. Bean property setter methods are effectively just a special case of such a general config method. Such config methods do not have to be public.

配置方法它可以是任意名称和有任意多个参数。这个方法的任何一个参数都将使用spring容器中匹配的bean来自动装填。Bean属性的setter方法也是有效的,它是普通的配置方法的一个特例。配置方法不是必须是public。

In the case of multiple argument methods, the 'required' parameter is applicable for all arguments.

当有多个参数的方法情况下,'required'将适用于所有参数。

In case of a Collection or Map dependency type, the container will autowire all beans matching the declared value type. In case of a Map, the keys must be declared as type String and will be resolved to the corresponding bean names.

Collection或Map依赖类型情况,容器将自动装配bean匹配声明的值类型,这个Map的key必须是String,Map的values必须是已知的类型。

属性

boolean required

Declares whether the annotated dependency is required.

Defaults to true.

声明这个注释依赖是否需要,默认是true。

A.1、数组、Set、Map

当我们用@Autowired来注释数组、Set、Map时,容器将自动绑定容器中所有匹配的bean。我们在上节的例子上修改来说明这个问题。

范例1

1.Foo

对数组使用自动绑定

  1. public class Foo {
  2. @Autowired
  3. private Bar[] bars;
  4. }

2.配置文件

配置文件中有2Bar,故这两bean(对象)将自动装配到foo中。

  1. <beans>
  2. <context:annotation-config/>
  3. <bean id="foo" class="x.y.Foo" />
  4. <bean id="bar1" class="x.y.Bar">
  5. <property name="a" value="bar1" />
  6. </bean>
  7. <bean id="bar2" class="x.y.Bar">
  8. <property name="a" value="bar2" />
  9. </bean>
  10. </beans>

3.测试类

测试类中将返回结果为2。

  1. Foo foo = (Foo) ctx.getBean("foo");
  2. Bar[] bars=foo.getBars();
  3. System.out.println(bars.length);

Set和Map实现方法类似,就是定义时有要求,必须定义为以下格式:

Set<Bar>

Map<String,Bar>

A.2、required

上例中若容器中没有Bar,将会报错,有时我们允许自动装配的属性为null,我们就需要这样来定义:

  1. @Autowired(required=false)
  2. private Bar bar;

这样若容器中没有Bar,它将自动装配null。

B、@Qualifier

org.springframework.beans.factory.annotation.Qualifier

public @interface Qualifier

This annotation may be used on a field or parameter as a qualifier for candidate beans when autowiring. It may also be used to annotate other custom annotations that can then in turn be used as qualifiers.

@Qualifier用于注释一个字段或参数,当自动绑定时它作为候选bean的限定器。它也可以用于自定义的限定器注释。

属性

value

B.1、举例说明

我们使用@AutoWired按照类型自动绑定,当容器中有多个匹配的bean时,将绑定那一个呢?我们可以通过在需要绑定的字段或参数上使用@Qualifier(value=” bar1”)来指定要绑定的bean。并在bean定义中使用<bean id="bar1"<qualifier value="bar1"/>来关联。

范例1

1.Foo

  1. public class Foo {
  2. @Autowired
  3. @Qualifier(value="bar1")
  4. private Bar bar;
  5. }

2.配置文件

配置文件中有2Bar,一个bean使用qualifier进行标注,一个使用id进行标注,容器将选择和@Qualifier(value)匹配的bean来进行绑定。

  1. <beans>
  2. <context:annotation-config/>
  3. <bean id="foo" class="x.y.Foo" />
  4. <bean class="x.y.Bar">
  5. <qualifier value="bar2"/>
  6. <property name="a" value="bar2" />
  7. </bean>
  8. <bean id="bar1" class="x.y.Bar">
  9. <property name="a" value="bar1" />
  10. </bean>
  11. </beans>

C、@Required

org.springframework.beans.factory.annotation.Required

public @interface Required

Marks a method (typically a JavaBean setter method) as being 'required': that is, the setter method must be configured to be dependency-injected with a value.

标注一个方法(通常是一个JavaBean的setter方法)是@Required,也就是,这个setter方法必须定义为通过一个值来依赖注入。

详解@Autowired、@Qualifier和@Required的更多相关文章

  1. Spring注解标签详解@Autowired @Qualifier等 @Slf4j

    @Slf4j @Slf4j注解实现日志输出 自己写日志的时候,肯定需要: private final Logger logger = LoggerFactory.getLogger(LoggerTes ...

  2. Spring注解标签详解@Autowired @Qualifier等

    http://blog.csdn.net/wangsr4java/article/details/42777855 @Component.@Repository.@Service.@Controlle ...

  3. [IoC]6 详解@Autowired、@Qualifier和@Required

    A.@Autowired org.springframework.beans.factory.annotation.Autowired public @interface Autowired Mark ...

  4. @Required @Autowired @Resource注解详解

    一.@Required注解用于检查特定的属性是否设置 1.RequiredAnnotationBeanPostProcessor 为该注解的处理器,即bean后置处理器,检查所有带有该解的bean属性 ...

  5. @Autowired 注解详解

    前言 我们平时使用 Spring 时,想要 依赖注入 时使用最多的是 @Autowired 注解了,本文主要讲解 Spring 是如何处理该注解并实现 依赖注入 的功能的. 正文 首先我们看一个测试用 ...

  6. Spring IoC @Autowired 注解详解

    前言 本系列全部基于 Spring 5.2.2.BUILD-SNAPSHOT 版本.因为 Spring 整个体系太过于庞大,所以只会进行关键部分的源码解析. 我们平时使用 Spring 时,想要 依赖 ...

  7. 学习 Spring (九) 注解之 @Required, @Autowired, @Qualifier

    Spring入门篇 学习笔记 @Required @Required 注解适用于 bean 属性的 setter 方法 这个注解仅仅表示,受影响的 bean 属性必须在配置时被填充,通过在 bean ...

  8. Rhythmk 一步一步学 JAVA (14) Spring-3 @Autowired,@Qualifier @Required @Resource @Component,@Service,@Controller,@Repository @PostConstruct,@PreDestroy

    1.@Autowired 注解:首先在使用时候需要引入配置: <!-- 该 BeanPostProcessor 将自动起作用,对标注 @Autowired 的 Bean 进行自动注入 --> ...

  9. @Autowired 与@Resource的区别详解

    spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resour ...

随机推荐

  1. Application,Session,Cookie,ViewState和Cache区别

    在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保 ...

  2. iOS开发环境C语言基础 数组 函数

    1 求数组元素的最大值 1.1 问题 创建程序,实现查询数组中最大值的功能,需求为:创建一个长度为10的数组,数组内放置10个0~99之间(包含0,包含99)的随机数作为数组内容,要求查询出数组中的最 ...

  3. git 上传

    首先明白两个点: git clone diveinedu@192.168.1.254:~/YGYSocket  从服务器上下载项目 divein 服务器密码 nc -l -t 2000  socket ...

  4. WebBrowser使用详解

    编号:1007时间:2016年4月29日14:53:45功能:WebBrowser使用详解URl:http://blog.sina.com.cn/s/blog_3d7bed6501000c8n.htm ...

  5. Quantum & r2q

    Quantum & r2q Let's assume we have 2 classes with the same parent : Parent : ceil = rate = 100 c ...

  6. unable to open sync connection

    有些时候,在你向连接好的Android机器中按照程序时会遭遇失败,logcat提示“unable to open sync connection”. 一般情况下,重启手机几乎肯定可以解决这个问题. 如 ...

  7. ui学习笔记---第十五天数据库

    数据库的使用 常见的数据库有MySQL       SQL Server       SQLite      Oralce等 在iOS开发中通常使用SQLite数据库,这是一个轻量级的数据库,可以在火 ...

  8. UI学习笔记---第六天

    UIControl及其子类 UISegmentedControl的用法 UISegmentedControl是iOS中得分段控件,每个segment都能被点击,相当于集成了若干个button.通常我们 ...

  9. ZSDRM001-发货清单

    REPORT ZSDRM001 LINE-SIZE 225 LINE-COUNT 65 NO STANDARD PAGE HEADING.*------------------------------ ...

  10. sql 语句累积

    // 查询用户表  手机号对应不只一个用户的手机号列表 跟数量 (项目在运营后晚上偶尔出现 多个用户对应一个手机号的情况) select mobile,count(mobile) from  go_m ...