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

  • 相关阅读:
    [bzoj3261]最大异或和(可持久化trie)
    [luogu3384] 【模板】树链剖分
    [luogu3369]普通平衡树(替罪羊树模板)
    fhq-treap模板
    [luogu3391] 【模板】文艺平衡树(fhq-treap反转区间)
    [luogu3369]普通平衡树(fhq-treap模板)
    [luogu3369]普通平衡树(treap模板)
    [bzoj3223]文艺平衡树(splay区间反转模板)
    A Path Plan(2018黑龙江省赛)
    Abandoned Animal(BAPC2017 Preliminaries )
  • 原文地址:https://www.cnblogs.com/emanlee/p/15754173.html
Copyright © 2011-2022 走看看