使用属性自动注解装配与在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 Ioc源码分析系列--@Autowired注解的实现原理 @ Автоwired注解是 Spring Framework 中的一个重要组件,它提供了自动装配的功能,能够将 Bean 之间的依赖关系自动解析和注入。今天,我们将深入探讨 @...
`@Autowired`注解由Spring提供,用于自动装配bean的依赖。当我们在字段、构造函数、方法或方法参数上使用`@Autowired`时,Spring会自动查找与所需类型匹配的bean,并将其注入到相应的位置。如果找到多个匹配的bean,...
`@Autowired`是Spring框架自带的一个注解,主要用于自动装配bean。它主要基于类型匹配,Spring会尝试找到与目标字段或方法参数类型相同的bean来注入。如果找到多个候选bean,可以通过指定`@Qualifier`来指定特定的...
Spring注解详解 -- @Autowired、@Resource和@Service Spring框架中有三个非常重要的注解,即@Autowired、@Resource和@Service。这三个注解都是Spring框架中最常用的注解,它们都是用于解决Spring框架中的依赖注入...
Spring 框架中提供了两个重要的注解,分别是@Resource 和@Autowired,它们都是用于 bean 的自动装配的。了解这两个注解的区别和使用场景是非常重要的。 首先,@Autowired 是 Spring 提供的注解,需要导入 org....
- **@Autowired注解的可选性**:使用`required`属性控制是否必须注入。默认为`true`,表示必须注入,否则抛出异常;设为`false`则允许不注入。 ```java @Autowired(required = false) private MyService ...
在Spring框架中,`@Autowired`注解是一个关键特性,用于自动装配Bean的依赖。它极大地简化了传统XML配置中的bean依赖注入过程。本笔记将深入探讨如何在Spring 4中利用`@Autowired`注解配置注入关系,以及它与前一篇...
在Spring框架中,`@Autowired`注解是一个关键特性,用于简化依赖注入的过程。依赖注入是一种设计模式,它允许我们解耦代码,提高模块的可测试性和可维护性。在这个主题中,我们将深入探讨`@Autowired`的工作原理、...
在Spring框架中,`@Autowired`和`@Resource`都是用于自动装配Bean的重要注解,它们简化了依赖注入的过程,使得代码更加简洁、易于维护。本文将深入探讨这两个注解的使用、区别以及如何在实际开发中应用它们。 首先...
通过分析这些代码,我们可以更好地理解Spring注解的使用和自动装配的工作原理。 总的来说,Spring注解极大地简化了Spring应用的配置,使得开发者可以更加专注于业务逻辑,而不是繁琐的XML配置。通过合理使用@...
首先,`@Autowired`的基本作用是自动装配Bean,即Spring容器会自动将合适的依赖注入到标记了该注解的构造函数、字段、setter方法或配置方法中。这减少了手动配置和查找依赖的代码,提高了开发效率和代码的可维护性。...
随着Spring的发展,@Autowired注解应运而生,这是Annotation版本的自动装配。它允许开发者在类的字段、方法或构造器上直接声明依赖,大大减少了XML配置的量。例如: ```java @Service public class UserService { ...
@Autowired 是 Spring 框架提供的依赖注入注解,主要支持在 set 方法、field 和构造函数中完成 bean 注入。其注入方式是通过类型查找 bean,即 byType 的,如果存在多个同一类型的 bean,则使用 @Qualifier 来指定...
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @...
首先,`@Autowired`注解是Spring框架特有的,主要用于按类型(byType)进行自动装配。当在字段或方法上使用`@Autowired`时,Spring会查找与该字段或方法参数类型相匹配的Bean,并将其注入。如果找到多个匹配的Bean,...
@Autowired 是 Spring 定义的注解,@Resource 是 JSR 250 规范里面定义的注解,而 Spring 对 JSR 250 规范提供了支持。@Autowired 如果需要支持 name 匹配,就需要配合 @Primary 或者 @Qualifier 来实现。 在实际...
在工具方面,IDEA等现代Java集成开发环境提供了对Spring注解的强大支持,如代码提示、自动完成、重构等,使得开发过程更加高效。同时,对于复杂的项目,使用Maven或Gradle构建工具管理依赖,结合Spring Boot等快速...
在Java的Spring框架中,`@Autowired`是一个关键的依赖注入(Dependency Injection,简称DI)注解,它允许开发者自动装配Bean的依赖,无需手动设置属性或者调用构造函数。这个注解是Spring框架的核心特性之一,极大地...
1. @Autowired注解 @Autowired是Spring提供的注解,它可以实现自动装配,开发者可以通过此注解自动注入Bean的依赖。Autowired注解可以用在成员变量、setter方法以及构造函数上。当Spring容器启动时,它会自动查找并...