• Spring 学习一 @Autowired


    @Autowired

    Spring 2.5 引入了 @Autowired ,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法

    @Autowired 注释时就找到和其匹配(默认按类型匹配)的 Bean,并注入到对应的地方中去。  

    applicationContext.xml配置

    <context:component-scan base-package="com.proc.bean" />   

    当然,您也可以通过 @Autowired 对方法或构造函数进行标注,如果构造函数有两个入参,分别是 bean1 和 bean2,@Autowired 将分别寻找和它们类型匹配的 Bean,将它们作为 CountryService (Bean1 bean1 ,Bean2 bean2) 的入参来创建 CountryService Bean。来看下面的代码:  对方法:

    package com.baobaotao;     
        
    public class Boss {     
        private Car car;     
        private Office office;     
        
         @Autowired    
        public void setCar(Car car) {     
            this.car = car;     
        }     
          
        @Autowired    
        public void setOffice(Office office) {     
            this.office = office;     
        }     
        …     
    }     

    这时,@Autowired 将查找被标注的方法的入参类型的 Bean,并调用方法自动注入这些 Bean。而下面的使用方法则对构造函数进行标注:   

    package com.baobaotao;     
        
    public class Boss {     
        private Car car;     
        private Office office;     
          
        @Autowired    
        public Boss(Car car ,Office office){     
            this.car = car;     
            this.office = office ;     
        }     
          
        …     
    }     

     那么使用@Autowired的原理是什么?

    其实在启动spring IoC时,容器自动装载了一个AutowiredAnnotationBeanPostProcessor后置处理器,当容器扫描到@Autowied、@Resource或@Inject时,就会在IoC容器自动查找需要的bean,并装配给该对象的属性

     <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>  

    注意事项:

      在使用@Autowired时,首先在容器中查询对应类型的bean

        如果查询结果刚好为一个,就将该bean装配给@Autowired指定的数据

        如果查询的结果不止一个,那么@Autowired会根据名称来查找。

        如果查询的结果为空,那么会抛出异常。解决方法时,使用required=false(默认是required=true)

    如果有两个同一个类型的都可以装配,就再根据名字来决定用哪个。 但是如果想用那个不同名字的呢?

    可以提供了一个@Qualifier标记,来指定需要装配bean的名称,代码这样写:

    1 @Autowired
    2 @Qualifier("userJdbcImps")
    3 private UserRepository userRepository;
  • 相关阅读:
    Linux之流程判断
    Linux之Shell变量
    Linux之RAID
    Y-Sport
    [ST2017] Lab1: Triangle type and Junit test
    [ST2017] Hw3: Prime Path
    [ST2017] Hw2: Fault, Error, Failure and test case for projects
    [SPM2017] Hw1: The outcome of my project [Deadline: 23:59:59, Mar.1, 2017]
    [ST2017] Hw1: An error from my past projects [Deadline: 23:59:59, Feb.27, 2017]
    一个使用Jmeter做接口性能测试的实战案例
  • 原文地址:https://www.cnblogs.com/liufei1983/p/7471540.html
Copyright © 2020-2023  润新知