SpringBoot底层原理——底层注解

本篇博客主要是介绍SpringBoot与底层源码相关的一些注解,只探究其作用,不做底层分析,本篇博客的目的是为之后SpringBoot源码分析做基础,当然其中相当一部分注解在平时使用SpringBoot的时候也经常会用到,这里就作为一个简单的复习。

1、@Configuration

有什么用?

告诉SpringBoot,这是一个配置类,等同于配置文件

配置类本身也是组件

属性

@Configuration(proxyBeanMethods = true):

  • 如果为true,表示容器中的对象是代理的单实例对象,也就是每次调用获取到的都是由SpringBoot代理的同一个对象,称为full全模式
  • 如果为false,表示容器中不保存代理对象,即每次调用获取到的是一个新的对象,称为lite轻量级模式

它的作用是,如果为true,SpringBoot每次调用组件都会检查容器中是否存在该组件,如果存在,就直接返回该组件,即组件间就会存在依赖关系,否则,SpringBoot每次调用组件都不会检查,而是直接new一个新的,这种方式启动速度快,更轻量,但组件间不存在依赖关系

例子

@Configuration(proxyBeanMethods = true)
public class MyConfig {
    //...
}

2、@Bean

有什么用?

@Configuration类中@Bean的方法就类似于配置文件种的bean标签,以方法名作为组件的id,返回类型就是组件类型,返回的值,就是组件在容器中的实例,默认是单实例的

属性

@Bean(“name”):定义组件的id为name

例子

@Configuration
public class MyConfig {
    @Bean("tom")
    public Pet tomcatPet(){
        return new Pet("tomcat");
    }
}

3、@Component、@Controller、@Service、@Repository

与Spring相同,用来告诉SpringBoot这是一个组件

4、@Import

有什么用?

用来向容器中导入我们想导入的组件,可以用在任何地方,调用容器的无参构造器自动创建出这两个类型的组件,默认组件的名字就是全类名

适用场景

当我们想自动控制依赖注入时,可以在加上这个注解,表示在这个组件注入的时候,同时注入它的依赖

例子

@Import({User.class, DBHelper.class})       //导入组件User、DBHelper
@Configuration
public class MyConfig {
    //...
}

5、@Conditional

有什么用?

条件装配:满足Conditional指定的条件,则进行组件注入,它是一个父注解,由它派生出了很多其它的注解

在这里插入图片描述

适用场景

一个组件的引入必须在另一个组件之后时,可以使用条件装配

例子

@ConditionalOnMissingBean(name = "tom")     //如果容器中没有tom组件,则创建该组件
@Configuration
public class MyConfig {
    //...
}

6、@ImportResource

有什么用?

用来引入由xml方式配置的组件

属性

@ImportResource(“classpath:beans.xml”):用来引入classpath下的beans.xml中配置的组件

适用场景

用来兼容一些还在用xml方式引入组件的老系统

例子

@ImportResource("classpath:beans.xml")      //导入xml配置
@Configuration
public class MyConfig {
    //...
}

7、@ConfigurationProperties

有什么用?

配置绑定,把properties文件中的某个或某几个配置自动配置到我们注解的类上面

注意:只有在容器中的组件,才会拥有SpringBoot提供的强大功能

属性

@ConfigurationProperties(prefix = “mycar”):把核心配置文件application.properties中,前缀为mycar的属性与类中的同名属性一一绑定

例子

@ConfigurationProperties(prefix = "mycar")
public class Car {
    //...
}

8、@EnableConfigurationProperties

有什么用?

与@ConfigurationProperties类似,开启配置绑定,并把配置的组件自动注入到容器中

注意:只能写在配置类中

属性

@EnableConfigurationProperties(Car.class):把Car中的属性进行自动配置并注入到容器中

适用场景

用来配置且注入没有用@Component的第三方包中的类

例子

@EnableConfigurationProperties(Car.class)   //1.开启Car配置绑定功能, 2.把这个Car这个组件自动注册到容器中
@Configuration
public class MyConfig {
    //...
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值