@Bean、@ComponentScan、@Import组件注册总结

Spring中组件注册的方式归纳

1.1 @Configuration配置类(配置文件)

@Configuration  //告诉spring这是一个配置类
public class MainConfig {
   
    
}

@Configtion告诉Spring这是一个配置类===>就相当于一个xml配置文件

所有spring在xml中的配置都可以在标有@Configuration这个配置类中配置

1.2@Bean注册组件

1.2.1@Bean简单注册组件
@Configuration  //告诉spring这是一个配置类
public class MainConfig {
   
    //给容器中注册一个bean;
    //类型为返回值的类型;
    //id为默认方法名;
    //id可以通过@Bean里面的取值修改。
    @Bean("person")
    public Person person(){
   
        return new Person("lisi",20);
    }
}
1.2.2@Scope设置组件作用域

在Spring中,组件拥有一定的作用域,我们可以通过@Scope设置bean的作用域。

在下面的配置类中我们可以通过 @Scope 注解给组件设置作用域:

@Configuration
public class MainConfig{
   

    @Scope("prototype")
    @Bean("person")
    public Person person(){
   
        return new Person("张三",25);
    }
}

在Spring容器中注册的bean如果没有设置@Scope默认都是单实例的;

@Scope 中的几个取值:

  • prototype: 多实例的,IOC容器启动并不会去调用方法创建对象放在容器中,每次获取的时候才会调用方法创建对象,每次获取都会调用方法创建一次。
  • singleton: 单实例的(默认值),IOC容器启动会调用方法创建对象放到IOC容器中,以后每次获取就直接从容器中拿。
  • request: 同一个请求创建一个实例。
  • session: 同一个session创建一个实例。

单实例下的懒加载 @Lazy

上面我们说到 @Scopesingleton 取值下bean为单实例,单实例bean会在IOC容器启动的时候默认创建对象,如果我们暂时用不上这个对象,那么容器一启动就创建对象将会占用一定的资源,这时我们可以使用懒加载来避免一创建容器就加载暂时不用的组件,当我们在第一次使用的时候才去创建该对象。

@Configuration
public class MainConfig{
   
    /**
     * 懒加载 :
     *      单实例bean:默认在容器启动的时候创建对象;
     *      懒加载:容器启动的时候先不创建对象。第一次获取bean的时候才加载
     *      @Lazy
     */
    @Lazy
    @Scope("singleton")
    @Bean("person")
    public Person person(){
   
        return new Person("张三",25);
    }
}

1.2.3@Conditional按照条件注册组件

配置了@Bean注解的组件,在默认情况下是任何条件都会被注册,在现实开发中不同的环境我们可能需要的组件不同,如果把全部条件下的组件都注册又太消耗资源,这时Spring 提供了 @Condational注解,可以根据在不同条件下注册我们所需要的组件。

我们点进 @Condational 注解源码看一下:

//@Condational源码

@Target({
   ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Conditional {
   

	/**
	 * All {@link Condition} classes that must {@linkplain Condition#matches match}
	 * in order for the component to be registered.
	 */
	Class<? extends Condition>[] value();

}

源码中可以看出使用@Conditional需要传入一

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值