SpringBoot第二天 - 底层注解

SpringBoot - 底层注解

SpringBoot一些底层注解的介绍

1. @Configuration

1.1 作用

注解@Configuration指定一个类为Spring配置类,相当于XML配置文件。
配置类中存在一个或多个使用@Bean注解的方法,这些方法连同配置类会被
Spring框架扫描,并用于构建Bean,初始化IOC容器。

1.2 作用范围

  • 类或接口(ElementType.TYPE)

1.3 属性

  • String value:指定此配置类的Bean名称;
  • boolean proxyBeanMethods:指定是否使用代理方式处理@Bean方法。

    如果设为true的话,IOC容器将使用代理方法创建对象,外部方法从IOC容器拿取对象时,
    Spring框架会检测当前对象是否已有实例,存在实例时直接返回实例,
    不存在时new一个实例返回。相当于Spring组件的生命周期中的单例模式(singleton);

    如果设为false的话,IOC容器直接使用原方法创建对象,外部方法从IOC容器拿取对象时,
    跳过检测直接new一个实例返回。相当于Spring组件的生命周期中的多例模式(prototype)。

    设为true的话,Spring将以全配置(Full mode)工作,设为false的话,
    Spring将以轻量级配置(Lite mode)工作。

    当配置类的组件存在依赖关系时一般使用全配置,
    不存在依赖关系时一般使用轻量级配置。

1.4 使用方式

在类上注解@Configuration,指定此类为一个Spring配置类。

2. @Import

2.1 作用

在配置类上使用@Import注解并指定某个类可以将此类添加到Spring的IOC容器中。
创建对象时使用该类的无参构造方法。当添加的类没有无参构造方法时,
Spring

2.2 作用范围

  • 类或接口(ElementType.TYPE)

2.3 属性

  • Class<?>[] value:指定要导入的类的字节码,可以导入多个类。

2.4 使用方式

在配置类上使用@Import,并指定value属性,即可导入组件。

3. @Conditional

3.1 作用

注解@Conditional可以实现条件装配,满足一定条件才向配置类中添加组件。

3.2 作用范围

  • 类或接口(ElementType.TYPE)
  • 方法(ElementType.METHOD)

3.3 属性

  • Class<? extends Condition>[] value:条件类的字节码数组。

    这里可以添加装配的条件,满足条件时才向配置类中添加组件。

3.4 使用方式

@Conditional注解作用在@Bean方法上时,满足条件时此Bean才会被添加至IOC容器。
@Conditional注解作用在组件类(所有被@Component注解及其派生注解的类,
被@Configuration注解的配置类)上时,满足条件时此类才会被添加至IOC容器,
反之不会添加至IOC容器,配置类里面的所有@Bean都不会被添加至IOC容器。

@Conditional注解有很多派生注解,这些注解各有各的使用方法:

@Conditional扩展注解作用
@ConditionalOnJava系统的java版本是否符合要求
@ConditionalOnBean容器中存在指定Bean
@ConditionalOnMissingBean容器中不存在指定Bean
@ConditionalOnExpression满足SpEL表达式指定
@ConditionalOnClass系统中有指定的类
@ConditionalOnMissingClass系统中没有指定的类
@ConditionalOnSingleCandidate容器中只有一个指定的Bean,或者这个Bean是首选Bean
@ConditionalOnProperty系统中指定的属性是否有指定的值
@ConditionalOnResource路径下是否存在指定资源文件
@ConditionalOnWebApplication当前是web环境
@ConditionalOnNotWebApplication当前不是web环境
@ConditionalOnJndiJNDI存在指定项

4. @ImportResource

4.1 作用

注解@ImportResource可以导入XML配置文件,如第三方XML配置文件或者外部XML配置文件。

4.2 作用范围

  • 类或接口(ElementType.TYPE)

4.3 属性

  • String[] value/locations:导入的文件位置;

    可以使用classpath:前缀来导入类路径下的文件。
  • Class<? extends BeanDefinitionReader> reader:Bean解析器。

    负责扫描导入的文件,并向IOC容器中添加Bean。

4.4 使用方式

注解@ImportResource可以写在配置类上,也可写在主程序类上。

5. @ConfigurationProperties

5.1 作用

配置绑定:

注解@ConfigurationProperties可以实现将外部配置信息和Bean的属性进行绑定。
比如把application.properties里自定义的键值对自动注入进Bean。

5.2 作用范围

  • 类或接口(ElementType.TYPE)
  • 方法(ElementType.METHOD)

5.3 属性

  • String value/prefix:键值对key的前缀;

    使用前缀来进行识别绑定。只能使用小写字母。具体使用方式会在下面讲解。
  • boolean ignoreInvalidFields:是否忽略无效字段;
  • boolean ignoreUnknownFields:是否忽略未知字段。

5.4 使用方式

介绍使用方式前先了解@ConfigurationProperties的用法:

  • 当@ConfigurationProperties作用在类上时:

    作用在类上的情况一般用于自动注入组件属性。
  • 当@ConfigurationProperties作用在方法上时:

    作用在方法上的情况一般用于被@Bean注解的方法上,用于自动注入组件属性。

@ConfigurationProperties的使用方式:

由于只能给在容器中的组件的属性进行自动注入,所以进行配置绑定需要将组件添加至IOC容器。
要注入的属性必须有get和set方法。

  1. 使用@Component注解:

组件类:

@Component("account")
@ConfigurationProperties(prefix = "account") // 此处的前缀与配置文件中的前缀对应
public class Account {
    private String owner;
    private Double money;
    ...
    // 属性的Getter和Setter
    ...
}

application.properties:

# 此处的前缀与@ConfigurationProperties中指定的前缀对应
account.owner=王五
account.money=500.0
  1. 使用@EnableConfiguraionProperties注解:

组件类:

@ConfigurationProperties(prefix = "account") // 此处的前缀与配置文件中的前缀对应
public class Account {
    private String owner;
    private Double money;
    ...
    // 属性的Getter和Setter
    ...
}

配置类:

@Configuration
@EnableConfigurationProperties(Account.class) // 把需要配置绑定的组件类添加至此
public class SpringConfig {
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值