zoukankan      html  css  js  c++  java
  • Spring @Autowired

    @Autowired

    @Autowired 默认按类型匹配的方式,在容器查找匹配的Bean,当有且仅有一个匹配的Bean时,Spring 将其注入到 @Autowired 标注的变量中。

    如果容器中没有一个和标注变量类型匹配的 Bean,Spring容器启动时将报 NoSuchBeanDefinitionException 的异常。如果希望 Spring 即使找不到匹配的 Bean 完成注入也不用抛出异常,那么可以使用 @Autowired(required=false)进行标注。

    @Service
    public class LogonService implements BeanNameAware{
        @Autowired(required=false)
        private LogDao logDao;
            ...
    }

    如果容器中有一个以上匹配的Bean时,则可以通过 @Qualifier 注解限定Bean的名称。

    @Service
    public class LogonService implements BeanNameAware{
        @Autowired(required=false)
        private LogDao logDao;    //①注入名为UserDao,类型为UserDao的Bean
        @Autowired
        @Qualifier("userDao")
        private UserDao userDao;
    }

    @Autowired 可以对类成员变量及方法的入参进行标注,下面我们在类的方法上使用@Autowired注解。

    package com.baobaotao.anno;
    
    import org.springframework.beans.factory.BeanNameAware;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.stereotype.Service;
    
    @Service
    public class LogonService implements BeanNameAware{
        
        private LogDao logDao;
        private UserDao userDao;
        
        
        @Autowired
        public void setLogDao(LogDao logDao) {
            this.logDao = logDao;
        }
        
        @Autowired
        @Qualifier("userDao")
        public void setUserDao(UserDao userDao) {
            System.out.println("auto inject");
            this.userDao = userDao;
        }
        
    }

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

    REF

    https://www.cnblogs.com/wuchanming/p/5426746.html

  • 相关阅读:
    不常用的cmd命令
    js获取宽度
    Marshaling Data with Platform Invoke 概览
    Calling a DLL Function 之三 How to: Implement Callback Functions
    Marshaling Data with Platform Invoke 之四 Marshaling Arrays of Types
    Marshaling Data with Platform Invoke 之一 Platform Invoke Data Types
    Marshaling Data with Platform Invoke 之三 Marshaling Classes, Structures, and Unions(用时查阅)
    Calling a DLL Function 之二 Callback Functions
    WCF 引论
    Marshaling Data with Platform Invoke 之二 Marshaling Strings (用时查阅)
  • 原文地址:https://www.cnblogs.com/emanlee/p/15754173.html
Copyright © 2011-2022 走看看