为了统一各种依赖注入框架的编程模型,JCP发布了Java依赖注入规范,JCP将其称为JSR-330.从Spring3开始,Spring已经开始兼容该注入模型
@Inject是JSR-330的核心部件。该注解几乎可以完全替代Spring的@Autowried注解。
@Inject private Foo foo
和@Autowried一样,@Inject可以自动装配属性、方法和构造器。
但和@Autowried不同的是,@Inject没有required属性。因此,@Inject的注解标注的依赖关系必须存在,如果不存在,则会抛出异常。
除了@Inject注解,JSR-330还提供了另外一种技巧,语气直接注入一个引用,不如要求@Inject注入一个Provider。Provider借口可以实现Bean引用的延迟注入以及注入Bean的多个实例等功能。
例如,我们有一个KnifeJuggler类需要注入一个或者多个Knife的实例。假设Knife Bean的作用域为prototype(非单例),下面的KnifeJuggle的构造器将获得5哥KnifeBean。
private Set<Knife> knives; @Inject public KnifeJuggle(Provider<Knife> knifeProvider){ knives = new HashSet<Knife>(); for (int i=0;i<5;i++){ knives.add(knifeProvider.get()); } }
KnifeJuggler将获得一个Provider<Knife>,而不是在构造器中获得一个knife实例。这个时候,只有Provider被注入进去;在调用knifeprovide.get()方法钱,实际的knife并没有被注入进去。调用5次,放入5个不同的knife对象。
限定@Inject所标注的属性
与@autowired的限定@qualifier类似,@Inject的限定为@Named。
@Inject @Named(”guitar“) private Foo foo;
Spring的@qualifier与JSR-330的@Named的关键区别在语义层面。@qualifier注解是缩小所拼配bean的选择范围(默认是Bean的id),而@Name通过Bean的Id来标示的。
创建自定义的JSR-330的Qualifier
与@Autowried的自定义Qualifier几乎一样,唯一区别注解的导入生声明。如下
//spring的@Autowried的@Qualifier自定义声明 import org.springframework.beans.factory.annotation.Qualifier; //JSR-330 @Inject的@Qualifier自定义声明 import javax.inject.Qualifier;
相关推荐
5. **基于JSR-330的自动装配**:Spring 3.0引入了对JSR-330标准的支持,包括`javax.inject.Inject`和`javax.inject.Named`注解,这些也可以用来实现自动装配。 在实际开发中,我们常常结合使用XML配置和注解,以...
在Spring框架中,自动装配(Autowiring)是一种机制,它允许Spring容器自动为bean提供其依赖,而无需显式配置。自动装配极大地简化了应用的配置,使得开发者可以更专注于业务逻辑。本文将深入探讨Spring自动装配的...
1. **IoC(Inversion of Control)容器**:Spring的核心特性之一是依赖注入(Dependency Injection),它通过反转控制来管理对象的生命周期和装配。IoC容器(ApplicationContext或BeanFactory)负责创建对象、管理...
`@Autowired`是Spring框架提供的一种便捷的方式来自动装配bean的依赖。 ### 1. `@Autowired`注解简介 `@Autowired`是Spring 2.5引入的,它基于类型匹配,用于自动将依赖的bean注入到当前bean中。如果存在多个候选...
- 用于实现自动装配,即Spring容器会自动将Bean实例注入到标记了此注解的字段或方法参数中。 - 默认情况下,`@Autowired` 是基于类型进行匹配的,如果存在多个相同类型的Bean,则需要配合`@Qualifier`注解进一步...
Spring 依赖注入是指在应用程序中将对象之间的依赖关系自动装配的过程。Spring 框架提供了多种依赖注入方式,包括 @Autowired、@Resource 和@Inject 等。在本文中,我们将详细介绍这三种依赖注入方式的区别和实现...
Spring框架的XML配置是其核心特性之一,它允许开发者声明Bean的定义,管理依赖关系以及配置其他服务。...通过理解不同类型的自动装配和注解的使用,开发者能够更好地控制和管理Spring容器中的Bean依赖关系。
- **基于@Autowired或@Inject注解的Autowiring策略**:通过注解实现更灵活的自动装配。 - **primary属性与@Qualifier注解控制**:精细化控制自动装配时的具体实现选择。 **2.4 资源操控** - **资源加载与操作**:...
- **自动装配(Autowired)**:Spring可以自动将Bean与Bean之间的依赖关系进行连接,只需要在Bean的属性或构造函数上添加`@Autowired`注解,Spring会根据类型或名称自动匹配合适的Bean进行注入。 - **@Qualifier**...
3. **Bean管理**:Spring作为容器管理Bean的生命周期,包括创建、配置、初始化、装配和销毁等过程。开发者可以通过XML、注解或Java配置方式来定义Bean。 4. **数据访问集成**:Spring支持JDBC、ORM框架(如...
标题中的“第五章 Spring4 自动装配、方法注入”指的是Spring框架中两个核心特性:自动装配(Autowired)和方法注入。这两个概念在Spring框架中占据了重要地位,它们极大地简化了依赖管理,使得开发者能够更加专注于...
8. **JSR-330标准支持**:Spring 3.2开始支持JSR-330依赖注入标准,如@Inject和@Provider注解,这使得Spring与其他遵循该标准的库更好地协同工作。 9. **异步处理与Web插座**:Spring 3.2引入了对异步方法的支持,...
Spring以IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)为核心,实现了对应用程序对象的生命周期管理和装配。这些概念使得代码更加松耦合,易于测试和维护。在Spring 3.1.1中,这些...
通过配置文件或注解,开发者可以声明对象及其依赖,由Spring容器自动完成实例化和装配,降低了代码的耦合度。 二、AOP(Aspect-Oriented Programming)面向切面编程 Spring的AOP模块提供了面向切面的编程能力,...
- 介绍了如何使用CustomAutowireConfigurer来定制自动装配的行为。 - **4.9.5 @Resource** - 介绍了@Resource注解的使用。 - **4.9.6 @PostConstruct和@PreDestroy** - 介绍了这两个注解如何用来指定bean的初始化...
在启动 Spring IoC 时,容器自动装载了一个 AutowiredAnnotationBeanPostProcessor 后置处理器,当容器扫描到 @Autowired、@Resource 或 @Inject 时,就会在 IoC 容器自动查找需要的 bean,并装配给该对象的属性。...
- `@Autowired`:自动装配bean,按类型匹配。`@Qualifier`可以进一步指定bean的ID。 - `@Primary`:当有多个相同类型的bean时,`@Primary`注解可以指示Spring优先选择该bean进行装配。 - `@Inject`和`@Named`是...
因此,我们无法直接引用该博客内容,不过我们可以基于Spring装配的一般知识进行深入讨论。 ### Spring装配的基本概念 1. **Bean**: 在Spring中,一个Java对象被称为一个Bean。Spring容器负责创建、初始化、配置以及...
首先,@Autowired是Spring框架自身提供的注解,主要用于类型匹配的自动装配。它具有一个可选属性`required`,默认值为`true`,表示如果找不到匹配的依赖,则会抛出异常。当`required`设置为`false`时,即使没有找到...
本文将深入解析Spring中的注解式编程,主要包括IOC(Inversion of Control,控制反转)的自动装配和依赖注入的解析。 首先,我们来看一下IOC自动装配。IOC是Spring的核心特性,它将对象的创建和管理从应用代码中...