zoukankan      html  css  js  c++  java
  • 通过注解配置Bean(2)

    问:怎么用注解来配置bean与bean之间的引用关系?

    【组件装配】

    1.<context:component-scan> 元素还会自动注册AutowiredAnnotationBeanPostProcessor实例,该实例可以自动装配具有@autowired和@Resource、@Inject注解的属性。

    【使用@Autowired自动装配Bean】

    @Autowired注解自动装配具有兼容类型的单个Bean属性

    --构造器,普通字段(及时是非public),一切具有参数的方法都可以应用 @Autowired注解

    --默认情况下,所有使用@Autowired注解的属性都需要被设置。当Spring找不到匹配的Bean装配属性时,会抛出异常若某一属性允许不被设置,可以设置@Autowired注解的required属性为false

    /spring-1/src/com/hk/beans/annotation/repository/UserRespositoryImpl.java:

     1 @Repository("userRepository")
     2 public class UserRespositoryImpl implements UserRespository {
     3     @Autowired
     4     private TestObject testObject;
     5     
     6     @Override
     7     public void save() {
     8         System.out.println("'UserRepository Save...");
     9         System.out.println(testObject);
    10     }
    11 }

    /spring-1/src/com/hk/beans/annotation/TestObject.java:

    1 package com.hk.beans.annotation;
    2 
    3 import org.springframework.stereotype.Component;
    4 
    5 public class TestObject {
    6     
    7 }

    运行结果:

    报错:No qualifying bean found for dependency [com.hk.beans.annotation.TestObject]: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

    然后,可以设置@Autowired注解的required属性为false,如下:

    运行结果:

    --默认情况下,当IOC容器里存在多个类型兼容的Bean时,通过类型的自动装配将无法工作。此时可以在@Qualifier注解里提供Bean的名称。Spring允许对方法的入参标注@Qualifier已指定的注入Bean的名称。

    --@Autowired注解也可以应用在数组类型的属性上,此时Spring将会把所有匹配的Bean进行自动装配。

    --@Autowired注解也可以应用在集合属性上,此时Spring读取该集合的类型信息,然后自动装配所有与之兼容的Bean。

    --@Autowired注解用在java.util.Map上时,若该Map的键值为String,那么Spring将自动装配与之Map值类型兼容的Bean,此时Bean的名称作为键值

     

    【使用@Resource和@Inject自动装配Bean】

    1.Spring还支持@Resource和@Inject注解,这两个注解和@Autowired注解的功能类似。

    2.@Resource注解要求提供一个Bean名称的属性,若该属性为空,则自动采用标注处的变量或方法名作为Bean的名称

    3.@Inject和@Autowired注解一样也是按类型匹配注入的Bean,但没有required属性。

    4.建议使用@Autowired注解

    每接触一个新领域,我就像一块掉进水里的海绵,四面八方的养分都让我不断充实。O(∩_∩)O~
  • 相关阅读:
    Flink实例(117):FLINK-SQL应用场景(16)以upsert的方式读写Kafka数据——以Flink1.12为例(二)
    Flink实例(116):FLINK-SQL应用场景(15)以upsert的方式读写Kafka数据——以Flink1.12为例(一)
    数据挖掘实践(17):基础理论(十七)数据挖掘基础(四)模型解释
    数据挖掘实践(16):基础理论(十六)数据挖掘基础(三)特征工程(二)性能度量与评估方法
    rust 可变变量
    Rust学习(32):智能指针-Rc<T>
    rust 高级编程
    rust 所有权
    rust智能指针
    Anbox:容器中的 Android,anboxandroid
  • 原文地址:https://www.cnblogs.com/zhzcode/p/9651234.html
Copyright © 2011-2022 走看看