`
hcl19891022
  • 浏览: 6202 次
社区版块
存档分类
最新评论

spring 注解装配-@Autowired注解

阅读更多

 

   使用属性自动注解装配与在xml中使用autowire 属性自动装配并没有太大差别。但是使用注解方式允许更细粒度的自动装配。

  Spring容器默认禁止注解装配的。所以使用注解装配要在spring配置中启动它。

  最简单的启动方式实在Spring的context命名空间配置中的

  <context:annotation-config>;

  一档配置完成,我们就可以对代码添加注解,标示Spring应有的属性、方法 和构造器进行自动装配。

 

Sprng3 支持一下不同的用于自动装配的注解:

   1.Spring 自带的@Autowired注解

   2.JSR-330 的@Inject注解

   3.JSR-250的@Resource注解

 

使用@Autowired注解

  当Spring对属性的set方法使用@Autowired,Spring就会尝试对该方法执行byType自动装配。

  也可以注解任一方法和构造器。

 

@Autowired
public class A {
  private B b;
  public A(B bb){
  this.b = bb;
  }
}

 

 当对构造器进行标注时,@autowired注解表示当创建Bean时,即使在Spring中xml文件中没有使用<constructor-ref>元素配置Bean,该构造器也需要自动装配

  另外,我们亦可以用其直接注解属性,并删除setter方法:

 @Autowired

  private A a;

  我们看到,@Autowired不受限于private关键字,是不是其没有限制?

  有两种会阻碍注解:

  具体来说就是,应用中必须只有一个Bean适合装配到@Autowired注解所标注的属性或参数中,如果没有或者存在多个拼配,就会拍出异常。但是我们有解决办法

 

 可选的自动装配

 默认情况下,@Autowired注解的属性或者参数必须是可装配的。如果没有匹配,自动装配就会抛出异常--NoSuchBeanDefinitionException。

 但属性不一定要装配,null值也是可以的,在这用情况下,可以通过设置@Autowired的required属性为false

 

@Autowired(required=false)
private Foo foo;

  在这里,spring将尝试装配foo属性,如果过哦没诶有找到相匹配的Bean,应用不会有任何问题,foo的属性值会设置为null;

 

  注意:required属性可以用于@Autowired注解所使用的任何地方。但是当使用构造器装配时,只有一个构造器可接将required的值设为true,其他必须为false。。此外,当使用@Autowried标注多个构造器时,Spring就会从所有满足装配条件的构造器中选择入参最多的那个构造器。

 

  限定歧义性的依赖

  可能在自动装配时会有多个Bean(至少2个)满足装配条件,这将导致异常。比如我们有两个Bean都实现了TestInterface 接口,为了鉴别哪个是我们需要的,我们可以用Spring的@Qualifier注解。

@Autowried
@Qualifier("guitar")
private Foo foo

   如上所示,@Qualifier注解将尝试注入id为 quitar的Bean。@Quealifier注解缩小了自动装配挑选Bean的范围

 

创建自定义的限定器(@Qualifier)

 

 

package qualifier;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.beans.factory.annotation.Qualifier;

@Target({ElementType.FIELD,ElementType.PARAMETER,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface TestQualifier{

}

 通过自义@TestQualifier注解,我们可以用它来代替@Qualifier。可以多次使用限定注解,下面的foo属性是指同时被TestQualifier 和TestQualifier2注解的类型

 

@Autowried
@TestQualifier //自定义A限定器
@TestQualifer2 //自定义B限定器 
private Foo foo;

 

 

 

 

 

 

分享到:
评论

相关推荐

    Spring In Action-2.1-01-@Component注解

    import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @...

    Spring@Autowired注解与自动装配.rar

    Spring@Autowired注解与自动装配.rar

    springMVC-annotation注解介绍

    @Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起...

    基于Spring@Autowired注解与自动装配详谈

    下面小编就为大家带来一篇基于Spring@Autowired注解与自动装配详谈。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    spring基础

    Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 @Autowired 按照类型来装配 改变如下: package com.baobaotao; import org.springframework.beans....

    彻底搞明白Spring中的自动装配和Autowired注解的使用

    主要介绍了彻底搞明白Spring中的自动装配和Autowired注解的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Spring面试题含答案.pdf

    38. 怎样开启注解装配? 39. @Required 注解 40. @Autowired 注解 41. @Qualifier 注解 42.在 Spring 框架中如何更有效地使用 JDBC? 43. JdbcTemplate 44. Spring 对 DAO 的支持 45. 使用 Spring 通过什么方式...

    Spring面试问答

    @Autowired注解对自动装配何时何处被实现提供了更多细粒度的控制。@Autowired注解可以像@Required注解、构造器一样被用于在bean的设值方法上自动装配bean的属性,一个参数或者带有任意名称或带有多个参数的方法。

    77道Spring面试题以及参考答案(2024年最新版)

    4. 注解部分列举了常用的Spring注解及其作用,如@Component、@Autowired等。 5. 数据访问部分涉及了Spring对JDBC、Hibernate等数据访问技术的集成支持。 6. AOP部分对面向切面的核心概念如通知、连接点、切点等进行...

    IoC容器的设计(利用反射、注解和工厂模式实现)

    我们需要将自定义四个注解,然后将Group和User类使用@Component注解,在User类中创建Group类的实例化对象并设置为自动装配,这样就能在User类中调用Group类的方法; 然后我们需要自己实现一个IoC容器类,处理自定义...

    spring-learn:Spring轻松学习demo

    Spring学习 介绍 Spring轻松学习demo 1.弹簧IOC容器 1.弹簧注入方式 set方法注入 构造方法注入 ...@Autowired可以注解列表和地图; @Order(1)更改注解顺序,list中有效 @Qualifier(“ beanServi

    Spring的学习笔记

    八、 自动装配autowire 13 (一) byName 13 (二) byType 14 (三) 注意 14 九、 生命周期 15 (一) lazy-init/default-lazy-init 15 (二) init-method destroy-method 不要和prototype一起用(了解) 15 第六课:...

    Spring面试专题.pdf

    20、请举例解释@Autowired 注解? 21、请举例说明@Qualifier 注解? 22、构造方法注入和设值注入有什么区别? 23、Spring 框架中有哪些不同类型的事件? 24、FileSystemResource 和 ClassPathResource 有何区别? 25...

    Spring面试题.zip

    20、请举例解释@Autowired 注解? 21、请举例说明@Qualifier 注解? 22、构造方法注入和设值注入有什么区别? 23、Spring 框架中有哪些不同类型的事件? 24、FileSystemResource 和 ClassPathResource 有何区别? 25...

    spring2.5 学习笔记

    八、 自动装配autowire 13 (一) byName 13 (二) byType 14 (三) 注意 14 九、 生命周期 15 (一) lazy-init/default-lazy-init 15 (二) init-method destroy-method 不要和prototype一起用(了解) 15 第六课:...

    Spring-Study:解决企业应用开发的复杂性

    Spring学习 介绍 解决企业应用开发的复杂性 常用依赖 &lt;groupId&gt;org.springframework &lt;artifactId&gt;spring-webmvc &lt;version&gt;5.2.0.RELEASE &lt;groupId&gt;junit ...@Autowired:自动装配通过类型,名字如果@Aut

    高级开发spring面试题和答案.pdf

    Spring下描述依赖关系@Resource, @Autowired和@Inject的区别与联系 Spring中BeanFactory和ApplicationContext的区别 谈谈Spring IOC的理解,原理与实现? bean的生命周期,详细看上面 SpringBoot自动装配的过程的原理...

    spring.doc

    3.6.1 @Autowired 26 3.6.2 @Qualifier 27 3.6.3 @Resource 27 3.6.4 @PostConstruct 28 3.6.5 @PreDestroy 28 注解注入拓展: 28 3.7扫描注入 30 注解扫描拓展: 32 Mvc用注解写: 34 Spring容器IOC和di的整个启动...

    25个经典的Spring面试问答

    请举例解释Autowired注解 请举例说明Qualifier注解 构造方法注入和设值注入有什么区别 Spring框架中有哪些不同类型的事件 FileSystemResource和ClassPathResource有何区别 Spring 框架中都用到了哪些设计模式

Global site tag (gtag.js) - Google Analytics