zoukankan      html  css  js  c++  java
  • Spring注入方式

    Spring 支持使用@Autowired, @Resource,  @Inject 三个注解进行依赖注入。

    @Autowired

    @Autowired为Spring 框架提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired

     

    装配顺序:

    1.按照type在上下文中查找匹配的bean,查找type为Svc的bean

    2.如果有多个bean,则按照name进行匹配

    • 如果有@Qualifier注解,则按照@Qualifier指定的name进行匹配,查找name为svcA的bean
    • 如果没有,则按照变量名进行匹配,查找name为svcA的bean

    3.匹配不到,则报错。(@Autowired(required=false),如果设置requiredfalse(默认为true),则注入失败时不会抛出异常)

     

    @Inject

    在Spring 的环境下,@Inject@Autowired 是相同的,因为它们的依赖注入都是使用AutowiredAnnotationBeanPostProcessor来处理的。

    @Inject是 JSR-330 定义的规范,如果使用这种方式,切换到Guice也是可以的。【Guice 是 google 开源的轻量级 DI 框架】

    @Inject是Java EE包里的,在SE环境需要单独引入。另一个区别在于@Autowired可以设置required=false@Inject并没有这个属性

     

    @Resource

    @Resource有两个重要的属性:nametype,而Spring 将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。

    装配顺序:

    1. 如果同时指定了nametype,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。

    2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。

    3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。

    4. 如果既没有指定name,又没有指定type,则默认按照byName方式进行装配;如果没有匹配,按照byTypeh进行装配。

    Spring 中有这么3种依赖注入的方式

    • 基于 field 注入(属性注入)
    • 基于 setter 注入
    • 基于 constructor 注入(构造器注入)

    1. 基于 field 注入

    所谓基于 field 注入,就是在bean的变量上使用注解进行依赖注入。本质上是通过反射的方式直接注入到field。这是我平常开发中看的最多也是最熟悉的一种方式,同时,也正是 Spring 团队所不推荐的方式

    ========》

    @Autowired
    private Svc svc;

    2. 基于 setter 方法注入

    通过对应变量的setXXX()方法以及在方法上面使用注解,来完成依赖注入。

    private Helper helper;

    @Autowired
    public void setHelper(Helper helper) {
        this.helper = helper;
    }

    3. 基于 constructor 注入

    将各个必需的依赖全部放在带有注解构造方法的参数中,并在构造方法中完成对应变量的初始化,这种方式,就是基于构造方法的注入。

    private final Svc svc;
        
    @Autowired
    public HelpService(@Qualifier("svcB") Svc svc) {
        this.svc = svc;
    }

  • 相关阅读:
    leetcode教程系列——Binary Tree
    《Ranked List Loss for Deep Metric Learning》CVPR 2019
    《Domain Agnostic Learning with Disentangled Representations》ICML 2019
    Pytorch从0开始实现YOLO V3指南 part5——设计输入和输出的流程
    Pytorch从0开始实现YOLO V3指南 part4——置信度阈值和非极大值抑制
    Pytorch从0开始实现YOLO V3指南 part3——实现网络前向传播
    Pytorch从0开始实现YOLO V3指南 part2——搭建网络结构层
    Pytorch从0开始实现YOLO V3指南 part1——理解YOLO的工作
    让我佩服的人生 文章
    win8.1配置cordova+ionic等一系列东西
  • 原文地址:https://www.cnblogs.com/KL2016/p/14854193.html
Copyright © 2011-2022 走看看