zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    今天上传公司服务器出现的.net framework版本错误问题
    浮动后父容器高度自适应
    asp net 编程问题 实现下一篇 和上一篇效果
    注意:"AspNetPager”的控件“AspNetPager1”必须放在具有 runat=server 的窗体标记内
    SqlDbHelper备份,做项目时方便应用(目前不太全,把自己项目中的逐渐转移过来)
    域名状态,域名查询看是否被注册
    关于403 由于扩展配置问题而无法提供您请求的页面的问题
    让qq图标在自己的网站上显示方法
    Tomcat基于虚拟路径的发布和web.xml配置
    Tomcat虚拟目录配置方法及原理
  • 原文地址:https://www.cnblogs.com/liufei1983/p/7471540.html
Copyright © 2011-2022 走看看