关于Spring配置类的小结

        首先介绍两个注解@Configuration、@Bean

        @Configuration:指明Ioc容器可以从当前的类中去获取bean。

        @Bean:返回一个对象,该对象将会被注册到bean中。

        通俗易懂的来讲呢,就是@Configuration去告诉Spring容器,你可以从被我注释的类里面去找被@bean注释的方法,然后从这个方法中去获取一个bean放到注册器中注册。

举个栗子:

第一个

盖子

@Data
public class Lid {
    private String name;

    public Lid() {
        System.out.println("创建了一个盖子");
    }
}

水杯

public class Cup {
    private Lid lid;

    public Cup(Lid lid) {
        System.out.println("我是杯子");
        this.lid = lid;
    }

    public void lib(){
        System.out.println("我是杯子函数中的lib");
    }
}

水杯的配置

@Configuration
public class CupConfig {
    @Bean
    public Cup cup(){
        return new Cup(lid());
    }

    @Bean
    public Lid lid(){
        return new Lid();
    }
}

测试类

        ApplicationContext context1 =
                new AnnotationConfigApplicationContext(CupConfig.class);
        Cup cup = context1.getBean(Cup.class);
        cup.lib();

        注意看,我们是在 AnnotationConfigApplicationContext(CupConfig.class);中直接去注入了杯子的配置类,所以现在在Ioc容器中已经帮我们创建好了一个Cup对象和一个Lib对象,我们直接拿来用就行。(拿来把你!)

 经过测试,确实是一个对象,都是从Spring容器中获取到的。

Cup cup = context1.getBean(Cup.class);
Lid lid = context1.getBean(Lid.class);
System.out.println(lid == cup.getLid());

第二个

那么当我们有多个配置类的时候,我们该如何去解决呢?

啊,问得好!

通过看参数类型我们可以看到, 这里面是可以传多个参数的,因此我们就有了以下的写法。

 当然!如果你觉得看起来很不舒服,那我们还可以把参数提出来嘛。

第三个

        AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext();
        context.register(ConfigA.class);
        context.register(ConfigB.class);
        context.refresh();

通过context手动去注册配置类,然后再调用refresh()方法刷新一下即可。

补充一个注解@Import

        你可以在一个配置类中去声明加载别的配置类,从而使你的代码看起来更加简洁和逻辑性(强调了这个类可能依附于哪个类)。

@Configuration
@Import(ConfigA.class)
public class ConfigB {

    @Bean
    public B b(){
        return new B();
    }
}
  AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext();
        context.register(ConfigB.class);
        context.refresh();
        A a = context.getBean(A.class);
        B b = context.getBean(B.class);

        这里只声明了注册了配置类B,而没有注册配置类A,但A也被成功注册!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狗头实习生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值