美文网首页
@Autowired自动注入用法

@Autowired自动注入用法

作者: zhengaoly | 来源:发表于2021-12-17 15:30 被阅读0次

    结合 https://www.jianshu.com/p/e9be22ddb10c 食用

    @Autowired 标注在方法上

    标注在方法(任一函数名),Spring容器创建完当前对象,就会调用方法,完成赋值;所以一般标注在属性的setter方法上。
    方法使用的参数,自定义类型的值从ioc容器中获取。
    配置类代码

    @Configuration
    @Import({Boss.class, Car.class})
    public class Boss {
    @Autowired
    public void setCar(Car car) {
      this.car = car;
        }
    }
    

    类似的,@Bean初始化时,对应函数的参数,默认不用写@autowired

    @Bean 的方法参数;参数从容器中获取;默认不写@Autowired效果是一样的;都能自动装配
    这种方式也可以自动装配不需要@Autowired
    @Bean标注的方法创建对象的时候,方法参数的值从容器中获取
       @Bean
        public Boss boss(Car car){
            Boss boss = new Boss();
            boss.setCar(car);
            return  boss;
        }
    

    @Autowired 使用在构造器上

    如果组件只有一个有参构造器,这个有参构造器的@Autowired可以省略,参数位置的组
    件还是可以自动从容器中获取。如果有多个有参数的构造函数,@autowired不能省略

      @Autowired //一个有参构造函数,此处可以省略
        //构造器要用的组件,都是从容器中获取
        public Boss(Car car){
            this.car = car;
            System.out.println("Boss...有参构造器");
        }
    

    当参数有多个实现时,可以通过@Qualifier指定,如下

        @Autowired 
        //构造器要用的组件,都是从容器中获取
        public Boss(@Qualifier("BMW") Car car){
            this.car = car;
            System.out.println("Boss...有参构造器");
        }
    

    @Autowired 使用在属性上

    class Boss{
        //标注在属性上,创建后自动注入
        @Autowired
        Car car;
    }
    

    @Autowired首先根据类型匹配,当同类型有多个实例时,再按名称匹配,此处会首先匹配Car类型,如果Car有多个实例,在匹配名称为car的bean,进行注入。同样可以结合@Qualifier指定bean

    @Autowired 使用在参数上

    method(@Autowired Car car)
    

    相关文章

      网友评论

          本文标题:@Autowired自动注入用法

          本文链接:https://www.haomeiwen.com/subject/wduifrtx.html