【SpringBoot_ANNOTATIONS】自动装配 03 方法 构造器位置的自动装配

自动装配 03 方法 构造器位置的自动装配

@Autowired的位置:构造器 方法 参数 属性 都是从容器中获取参数的值

  1. 方法上:Spring容器创建当前对象就会调用此方法 完成赋值
    • 方法使用的参数 自定义类型就会从ioc容器中获取
  2. 构造器上: 构造器要用的组件都是从容器中获取
    • 若bean中只有一个有参构造方法,@Autowired注解可以省掉,默认会调用这个参数位置的组件还是会从ioc容器获取
  3. 参数上:@Bean + 方法参数:默认不写@Autowired ,也能自动装配 也是从ioc容器中获取

Boss.java

@Component
public class Boss {

    private Car car;

    public Car getCar() {
        return car;
    }

    @Autowired
    public void setCar(Car car) {
        this.car = car;
    }

    @Override
    public String toString() {
        return "Boss{" +
                "car=" + car +
                '}';
    }
}

Car.java

/**
 * 生命周期测试
 * 自动装配测试
 */
@Component
public class Car {
    public Car() {
        System.out.println("car constructor ...");
    }

    /**
     * 做初始化方法
     * 初始化方法不可以有参数 但可以抛异常
     */
    public void init() {
        System.out.println("car init ...");
    }

    /**
     * 做销毁方法
     * 销毁方法不可以有参数 但可以抛异常
     */
    public void destroy() {
        System.out.println("car destroy ...");
    }
}

配置类

@Configuration
@ComponentScan(value = {"com.example.annotations.service","com.example.annotations.dao","com.example.annotations.controller","com.example.annotations.bean"})
public class MainConfig4Autowire {

}

测试:

    @Test
    void autowiredTest(){
        //配置类测试
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig4Autowire.class);
        System.out.println("容器创建完毕");
        //获取bean
        System.out.println("准备获取bean");
        Boss boss = applicationContext.getBean(Boss.class);
        Car car = applicationContext.getBean(Car.class);
        System.out.println(boss.toString());
        System.out.println(car.toString());
        System.out.println("获取完毕");
        //关闭容器
        applicationContext.close();
        System.out.println("容器已关闭");
    }

在这里插入图片描述

@Bean + 方法参数

@Component
public class Boss {

    private Car car;

    public Boss(Car car) {
        System.out.println("构造方法注入");
        this.car = car;

    }

    public Car getCar() {
        return car;
    }

//    @Autowired
    public void setCar(Car car) {
        System.out.println("setter注入");
        this.car = car;
    }

    @Override
    public String toString() {
        return "Boss{" +
                "car=" + car +
                '}';
    }
}

运行测试之后可看到有相应输出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值