使用属性自动注解装配与在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;
相关推荐
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @...
Spring@Autowired注解与自动装配.rar
@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起...
下面小编就为大家带来一篇基于Spring@Autowired注解与自动装配详谈。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 @Autowired 按照类型来装配 改变如下: package com.baobaotao; import org.springframework.beans....
主要介绍了彻底搞明白Spring中的自动装配和Autowired注解的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
38. 怎样开启注解装配? 39. @Required 注解 40. @Autowired 注解 41. @Qualifier 注解 42.在 Spring 框架中如何更有效地使用 JDBC? 43. JdbcTemplate 44. Spring 对 DAO 的支持 45. 使用 Spring 通过什么方式...
@Autowired注解对自动装配何时何处被实现提供了更多细粒度的控制。@Autowired注解可以像@Required注解、构造器一样被用于在bean的设值方法上自动装配bean的属性,一个参数或者带有任意名称或带有多个参数的方法。
4. 注解部分列举了常用的Spring注解及其作用,如@Component、@Autowired等。 5. 数据访问部分涉及了Spring对JDBC、Hibernate等数据访问技术的集成支持。 6. AOP部分对面向切面的核心概念如通知、连接点、切点等进行...
我们需要将自定义四个注解,然后将Group和User类使用@Component注解,在User类中创建Group类的实例化对象并设置为自动装配,这样就能在User类中调用Group类的方法; 然后我们需要自己实现一个IoC容器类,处理自定义...
Spring学习 介绍 Spring轻松学习demo 1.弹簧IOC容器 1.弹簧注入方式 set方法注入 构造方法注入 ...@Autowired可以注解列表和地图; @Order(1)更改注解顺序,list中有效 @Qualifier(“ beanServi
八、 自动装配autowire 13 (一) byName 13 (二) byType 14 (三) 注意 14 九、 生命周期 15 (一) lazy-init/default-lazy-init 15 (二) init-method destroy-method 不要和prototype一起用(了解) 15 第六课:...
20、请举例解释@Autowired 注解? 21、请举例说明@Qualifier 注解? 22、构造方法注入和设值注入有什么区别? 23、Spring 框架中有哪些不同类型的事件? 24、FileSystemResource 和 ClassPathResource 有何区别? 25...
20、请举例解释@Autowired 注解? 21、请举例说明@Qualifier 注解? 22、构造方法注入和设值注入有什么区别? 23、Spring 框架中有哪些不同类型的事件? 24、FileSystemResource 和 ClassPathResource 有何区别? 25...
八、 自动装配autowire 13 (一) byName 13 (二) byType 14 (三) 注意 14 九、 生命周期 15 (一) lazy-init/default-lazy-init 15 (二) init-method destroy-method 不要和prototype一起用(了解) 15 第六课:...
Spring学习 介绍 解决企业应用开发的复杂性 常用依赖 <groupId>org.springframework <artifactId>spring-webmvc <version>5.2.0.RELEASE <groupId>junit ...@Autowired:自动装配通过类型,名字如果@Aut
Spring下描述依赖关系@Resource, @Autowired和@Inject的区别与联系 Spring中BeanFactory和ApplicationContext的区别 谈谈Spring IOC的理解,原理与实现? bean的生命周期,详细看上面 SpringBoot自动装配的过程的原理...
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的整个启动...
请举例解释Autowired注解 请举例说明Qualifier注解 构造方法注入和设值注入有什么区别 Spring框架中有哪些不同类型的事件 FileSystemResource和ClassPathResource有何区别 Spring 框架中都用到了哪些设计模式