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

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

 
阅读更多

   从Spring 2.5 开始,自动装配功能进行了多次改进,可以通过@Autowired或者@Resource注解一个设值方法,构造字段,属性甚至任意方法自动装配特定的属性。

    为了要求Spring 自动装配具有@Autowired或者@Resource注解的属性,必须在IOC容器中注册一个AutowiredAnnotationBeanPostProcessor实例。在上下文中什么实例:

写道
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

 也可以在bean的配置文件中包含<context:annotation-config/>元素。或者是

写道
<context:component-scan base-package="*"></context:component-scan>

 默认情况下所有带@Autowired的属性都是必须的,如果没有找到匹配的Bean就会抛出如下异常

写道
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sequenceGenerator': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private SpringInAction.IOC.PrefixGenerator SpringInAction.IOC.SequenceGeneratorImpl.prefixGenerator; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [SpringInAction.IOC.PrefixGenerator] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
 at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
 at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
 at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
 at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:607)
 at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:925)
 at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:472)
 at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
 at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
 at SpringInAction.IOC.App.main(App.java:14)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private SpringInAction.IOC.PrefixGenerator SpringInAction.IOC.SequenceGeneratorImpl.prefixGenerator; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [SpringInAction.IOC.PrefixGenerator] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
 at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:513)
 at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:92)
 at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284)
 ... 13 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [SpringInAction.IOC.PrefixGenerator] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:947)
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:816)
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:730)
 at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:485)
 ... 15 more

 如果你希望某个属性是可选的可以将@Autowired的required属性设置为false 。这样当Spring 找不到匹配的bean之后,将不设置该属性。

 

写道
@Autowired(required=false)
private PrefixGenerator prefixGenerator;

 运行结果:

ABC10000A
ABC10001A

 

      默认情况下,按照类型自动装配在IOC容器中有超过一个类型兼容性的Bean时无效,但是Spring 允许指定一个候选Bean 这个Bean的名称在@Qulifier注解中提供。

 

  • IOC.zip (19.4 KB)
  • 下载次数: 0
分享到:
评论

相关推荐

    spring3.x注解

    在 Spring 3.x 中,提供了两种用于属性装配的注解:@Autowired 和 @Resource。 1. @Autowired @Autowired 注解用于自动装配依赖项,默认按照类型匹配的方式(byType)进行注入。可以用于成员变量、setter 方法、...

    spring注解方式解析

    - `@Component`、`@Service`、`@Repository`和`@Controller`:它们是Spring的组件注解,用于标记不同类型的bean,方便组件扫描和自动注册。 - `@Scope`:定义bean的作用域,如`@Scope("prototype")`表示多例,`@...

    Spring的Annotation配置相关讲义

    通过`@Component`、`@Service`、`@Repository`等注解,我们可以快速地将类声明为Spring管理的Bean,而`@Autowired`和`@Resource`则负责自动装配依赖。这种配置方式减少了XML配置文件的复杂性,提升了开发效率。

    ssh2框架整合,struts2和hibernate均交由spring管理,用注解的方式由spring注入

    Spring使用注解来简化配置,如`@Autowired`用于自动装配依赖,`@Service`、`@Repository`和`@Controller`用于标记服务、数据访问层和控制器组件。 3. **Hibernate**:Hibernate是一个强大的ORM(对象关系映射)框架...

    strut2和spring整合

    - 虽然这里没有提到,但整合后,Struts2 也可以利用 Spring 的注解(如 `@Autowired`, `@Qualifier`, `@Resource` 等)来进一步简化配置和实现依赖注入。 通过以上步骤,Struts2 框架与 Spring 框架可以无缝集成,...

    spring和Struts2注解文档

    自动装配Bean,Spring会根据类型匹配查找Bean实例并注入到需要的地方,极大地减少了XML配置的工作量。 ##### 1.2.4 @RequestMapping注解 用于映射HTTP请求到具体的处理方法上,可以指定请求路径、请求类型等参数。...

    Spring的学习笔记

    - **@Autowired**:自动装配bean,可以按类型或按名称匹配。 - **@Qualifier**:配合@Autowired指定注入的具体bean。 - **@Resource**:JSR-250标准注解,主要用于字段级别的注入,按名称匹配。 - **@Component**:...

    Spring学习笔记

    - **@Autowired**:用于自动装配Bean,Spring会根据类型自动匹配。 - **@Qualifier**:当有多个相同类型的Bean时,可以用来指定具体的Bean。 - **@Resource**:基于JSR-250规范,用于资源查找,也可以用来替代@...

    Spring常用注解汇总

    * 解释:@Autowired 注解用于自动装配 Bean,例如按类型装配、按名称装配等。 @Qualifier * 作用:用于指定按名称装配的 Bean。 * 解释:@Qualifier 注解用于指定按名称装配的 Bean,例如 @Autowired @Qualifier(...

    学习Spring笔记_IoC(控制反转)简介

    例如,`@Autowired`用于自动装配bean,`@Qualifier`用于指定特定的bean,`@Resource`用于按名称注入,以及`@Inject`(JSR-330)和`@ManagedProperty`等。 ### 6. AOP(面向切面编程) Spring的另一个核心特性是AOP...

    spring框架学习

    - **注入注解标记使用方法**:使用`@Autowired`、`@Resource`等注解来自动装配Bean。 - **AOP注解标记使用方法**:使用`@Aspect`、`@Before`等注解来定义和使用切面。 #### 八、Spring对数据访问技术的支持 - **...

    struts+spring+hibernate

    4. 在Struts的Action中,通过@Autowired或@Resource注解注入由Spring管理的Service类。 5. Service类中通过SessionFactory获取Session,进行数据库操作。 6. 使用Spring的PlatformTransactionManager配置事务管理。 ...

    spring2.5 参考手册

    - **@Autowired**:自动装配Bean,无需显式配置。 - **@Resource**:指定名称的Bean注入。 #### 5.2 支持EL表达式 - **Expression Language**:在配置文件中使用表达式语言来进行动态配置。 #### 5.3 支持AspectJ ...

    [浪曦原创]Struts2.Hibernate3.2.Spring2.0整合(风中叶)

    Spring能够管理Struts2 Action和Hibernate DAO的生命周期,通过@Autowired或@Resource注解,可以自动装配依赖。此外,Spring的AOP功能可以用来实现事务管理,确保数据的一致性。 教程可能还会涵盖以下内容: 1. ...

    JavaEE测试题(Spring2)

    其中,注解配置如`@Autowired`、`@Resource`等,使得依赖注入变得更加简洁和直观。Java配置则通过`@Configuration`和`@Bean`注解来定义bean的装配规则,提供了一种更为类型安全和可读性的配置方式。

    STRUTS2+SPRING3+ACTIVITI5 整合 jar 包

    这包括在STRUTS2的Action类中声明SPRING注解(@Autowired、@Resource等)或者使用SPRING提供的Action代理类。 4. **配置ACTIVITI5**:在应用中引入ACTIVITI5的jar包,并在SPRING配置文件中配置ACTIVITI的启动器和...

    sruts2.1spring3.0hibernate3.3 JAR包

    1. @Autowired注解:自动装配bean的依赖,使得配置更加简洁。 2. 面向资源(Resource):支持基于注解的资源管理,如文件、数据库连接等。 3. Spring MVC增强:增强了对RESTful服务的支持,以及模板引擎的集成。 4. ...

    Struts2+Hibernate+Spring三大框架集成范例

    在SSH集成中,Spring管理Struts2的Action和Hibernate的SessionFactory,通过配置bean来实例化和装配这些对象。此外,Spring的AOP功能可以用于事务管理,确保数据操作的原子性和一致性。 4. **集成过程**:SSH的集成...

    S2SH+rest注解配置实例

    同时,@Autowired注解可以自动装配Bean的依赖,而@Qualifier则用于指定具体要注入的Bean。此外,Spring还提供了对bean命名策略的配置,如通过`@ComponentScan`注解中的`@BeanNameGenerator`属性来自定义Bean的名称...

Global site tag (gtag.js) - Google Analytics