`
bolinyang
  • 浏览: 75338 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

再看Spring中的自动注解之@Resource和@Autowired

阅读更多
一.概述

一开始使用公司框架的时候发现可以在web层使用@Resource以及@Autowired来注入一些bean,首先这个注解是Spring提供的,自己把这部分代码抽出来写了小例子,发现要想使用Spring的这两注解,必须直接或者间接的引入AutowiredAnnotationBeanPostProcesso以及CommonAnnotationBeanPostProcessor这两个注解处理器引入到BeanDefinitions中,否则不会实现注入的,但是仔细阅读公司框架代码后发现没有地方直接或间接引入这两个注解处理器,发现一个细节,公司框架所依赖的Spring版本是2.5.6而我使用的Spring版本是2.5.5,当初的结论是高版本的Spring在容器启动的时候,自动把这两个注解处理器加入到BeanDefinitions中,这几天仔细看了看Spring的源代码,发现Spring2.5.6并没有这样做。然后子写DEBUG了一下公司框架的源代码,最后发现原来公司框架有一个自己的XmlWebApplicationContext,在这个context中重写customizeBeanFactory(),在这个方法中调用了AnnotationConfigUtils.registerAnnotationConfigProcessors()方法把这两自动注解处理器加入到BeanDefinitions中,这样公司框架在web层就支持@Resource和@Autowired进行自动注入啦

二.关于@Resource和@Autowired

1.@Autowired注入是按照类型注入的,只要配置文件中的bean类型和需要的bean类型是一致的,这时候注入就没问题。但是如果相同类型的bean不止一个,此时注入就会出现问题,Spring容器无法启动。
2.@Resourced标签是按照bean的名字来进行注入的,如果我们没有在使用@Resource时指定bean的名字,同时Spring容器中又没有该名字的bean,这时候@Resource就会退化为@Autowired即按照类型注入,这样就有可能违背了使用@Resource的初衷。所以建议在使用@Resource时都显示指定一下bean的名字@Resource(name="xxx")

三.可以让@Resource和@Autowired生效的几种方式

1.在xml配置文件中显式指定

<!-- 为了使用Autowired标签,我们必须在这里配置一个bean的后置处理器 -->
	<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" /> 
	
	<!-- 为了使用@Resource标签,这里必须配置一个后置处理器 -->
	<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" /> 


2.在xml配置文件中使用context:annotation-config


3.在xml配置文件中使用context:component-scan


4.重写Spring容器的Context,在自定义BeanFactory时调用AnnotationConfigUtils.registerAnnotationConfigProcessors()把这两个注解处理器增加到容器中。
分享到:
评论

相关推荐

    (转)Spring中@Autowired注解和@Resource注解的区别

    在Spring框架中,`@Autowired`和`@Resource`注解是两个常见的依赖注入(DI, Dependency Injection)工具,它们都是用来解决组件之间的耦合问题,使得代码更加灵活和可测试。然而,这两个注解在具体使用时有一些关键性...

    Spring注解@Resource和@Autowired.doc

    Spring 框架中提供了两个重要的注解,分别是@Resource 和@Autowired,它们都是用于 bean 的自动装配的。了解这两个注解的区别和使用场景是非常重要的。 首先,@Autowired 是 Spring 提供的注解,需要导入 org....

    详解Spring注解--@Autowired、@Resource和@Service

    Spring注解详解 -- @Autowired、@Resource和@Service Spring框架中有三个非常重要的注解,即@Autowired、@Resource和@Service。这三个注解都是Spring框架中最常用的注解,它们都是用于解决Spring框架中的依赖注入...

    Spring框架中 @Autowired 和 @Resource 注解的区别

    在Spring框架中,注解是实现依赖注入的重要方式,其中包括`@Autowired`和`@Resource`两个常用的注解。它们虽然都可以用来注入依赖,但在实际使用中存在一些区别。 首先,`@Autowired`注解是Spring框架特有的,主要...

    Spring In Action 使用@Autowired 和@ Resource 自动装配Bean

    在Spring框架中,`@Autowired`和`@Resource`都是用于自动装配Bean的重要注解,它们简化了依赖注入的过程,使得代码更加简洁、易于维护。本文将深入探讨这两个注解的使用、区别以及如何在实际开发中应用它们。 首先...

    【Java面试】@Resource 和 @Autowired 的区别.doc

    在 Spring 框架中,@Resource 和 @Autowired 是两种常用的依赖注入方式,但是它们之间存在着一些关键的区别。 首先,让我们来了解 @Autowired 注解。@Autowired 是 Spring 框架提供的一个注解,默认是根据类型来...

    详解Spring依赖注入:@Autowired,@Resource和@Inject区别与实现原理

    @Autowired 是 Spring 框架提供的依赖注入注解,主要支持在 set 方法、field 和构造函数中完成 bean 注入。其注入方式是通过类型查找 bean,即 byType 的,如果存在多个同一类型的 bean,则使用 @Qualifier 来指定...

    spring框架的@Resource和@Component 程序和文档

    在Spring框架中,`@Resource`和`@Component`是两个重要的注解,它们用于不同的目的,但都与依赖注入(Dependency Injection,简称DI)息息相关。理解这两个注解的使用和区别是掌握Spring框架核心概念的关键。 首先...

    Spring使用@Autowired注解自动装配

    在Spring框架中,`@Autowired`注解是一个关键特性,用于简化依赖注入的过程。依赖注入是一种设计模式,它允许我们解耦代码,提高模块的可测试性和可维护性。在这个主题中,我们将深入探讨`@Autowired`的工作原理、...

    Spring注解@Resource和@Autowired区别对比详解

    主要介绍了Spring注解@Resource和@Autowired区别对比详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    1.@Resource是按名称进行注入的,属于java自带的。@Autowired是按类型进行注入的,属于Spring。.pdf

    Spring框架是Java领域中实现DI的典型代表,提供了多种注解来支持这一机制,其中两个常用的注解是`@Resource`和`@Autowired`。虽然它们都可以用来实现依赖注入,但它们的用法和原理有所不同。 首先,`@Resource`注解...

    20 面试官,请不要再问我@Resource和@Autowire注解的区别了慕课专栏(1)1

    在Java Spring框架中,`@Resource`和`@Autowired`都是用于依赖注入(DI)的注解,但它们有着不同的用途和工作原理。本篇文章主要关注`@Resource`注解,探讨其使用方法和实现机制。 `@Resource`注解通常用于按名称注入...

    springmvc @Resource 注解方式问题

    在Spring MVC框架中,`@Resource`注解是用来管理依赖注入(Dependency Injection,简称DI)的一种方式。这个注解主要用于标注字段或者方法,以便Spring容器能够自动为它们提供实例化对象。本文将深入探讨`@Resource`...

    spring3注解详细

    本文将详细介绍几个关键的注解,包括 @Autowired、@Qualifier、@Resource 和 @PostConstruct,以及它们在实际开发中的应用。 ## 1. @Autowired 注解 @Autowired 是 Spring 提供的一种自动装配机制,它可以根据类型...

    编码剖析@Resource注解的实现原理

    2. **注解处理**:Spring容器中的`AutowiredAnnotationBeanPostProcessor`和`CommonAnnotationBeanPostProcessor`两个后处理器负责处理`@Autowired`和`@Resource`。`CommonAnnotationBeanPostProcessor`尤其关注`@...

    Spring 中 @Service 和 @Resource 注解的区别

    除了@Service和@Resource,Spring还提供了一些其他常见的注解,包括@Controller(用于控制器,如Struts中的action)、@Repository(用于DAO层组件,数据访问组件)和@Component(通用注解,当组件类别不确定时使用)...

    详解Spring关于@Resource注入为null解决办法

    Spring 框架中,@Resource 注解是一种常用的依赖注入方式,用于将对象注入到应用程序中。但是,在实际开发中,经常会遇到 @Resource 注解的对象为 null 的问题。本文将详细介绍 Spring 中 @Resource 注解解决 null ...

    用@Resource注解完成属性装配

    在Spring框架中,`@Resource`注解是一个重要的组件,用于实现依赖注入(Dependency Injection,简称DI)。依赖注入是Spring的核心特性,它使得组件之间的耦合度降低,提高了代码的可测试性和可维护性。本篇文章将...

    4Spring自动装配——annotation resource方式

    `@Autowired`是Spring中最常见的注解,用于自动装配匹配类型的Bean。然而,`@Resource`注解则提供了另一种自动装配方式,尤其是在处理Java EE规范中的资源时,如JNDI查找。 ### 二、`@Resource`注解 `@Resource`...

    spring使用resource注解的demo

    在这个"spring使用resource注解的demo"中,我们将深入探讨如何使用`@Resource`以及它与`@Autowired`的区别。 首先,`@Resource`注解的主要目的是为了自动装配bean,它的基本语法是在字段或方法上使用,如: ```...

Global site tag (gtag.js) - Google Analytics