• 通过注解配置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~
  • 相关阅读:
    [转]UNI-APP开发笔记之使用uni.navigateBack修改上一个页面值
    [转]移动端人员选择的设计思考
    [转]nginx安装及其配置详细教程
    [转]Vue 使用use、prototype自定义自己的全局组件
    [转]uniapp项目运行支付宝小程序,报错:xxx.json中没有申明component: true
    支付宝(钉钉)小程序使用uView控制台报错Cannot read property 'title-all' of undefined
    [转]commonJS规范和require,import区别
    [转]module.exports和export详解
    [转]如何在组件中去使用vuex的值和方法?
    [转]CryptoJS中AES256(CBC)加密算法简单使用
  • 原文地址:https://www.cnblogs.com/zhzcode/p/9651234.html
Copyright © 2020-2023  润新知