SpringBoot-常用注解

组件添加

@Configuration、@Bean

  1. 配置类
  • 之所以会生效是因为: spring boot 项目默认会扫描主启动类同级的包
java 复制代码
//告诉SpringBoot这是一个配置类 == 配置文件
//配置类本身也是组件
@Configuration(proxyBeanMethods = false) 
public class MyConfig {

	//配置类里面使用@Bean标注在方法上给容器注册组件,默认是单实例的
	//以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
    @Bean 
    public User user01(){
        User zhangsan = new User("zhangsan", 18);
        //user组件依赖了Pet组件
        zhangsan.setPet(tomcatPet());
        return zhangsan;
    }

    @Bean("tom")
    public Pet tomcatPet(){
        return new Pet("tomcat");
    }
}
  1. proxyBeanMethods:代理bean的方法
  • Full(proxyBeanMethods = true):
    • 保证每个@Bean方法被调用多少次返回的组件都是单实例的
    • 单例模式能有效避免Lite模式下的错误,会先检查容器中是否有该组件,性能没有Lite模式好
    • 配置类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式
  • Lite(proxyBeanMethods = false):
    • 每个@Bean方法被调用多少次返回的组件都是新创建的,
    • 配置类组件之间无依赖关系用Lite模式加速容器启动过程,不会检查容器,直接创建一个新的组件返回
    • 运行时不用生成CGLIB子类,可以减少判断,提高运行性能,降低启动时间,可以作为普通类使用。但是不能声明@Bean之间的依赖
    • Lite模式不完全等同于Spring中的原型模式,因为原型模式不会在IOC创建时就创建对象,而Lite模式则是在创建IOC容器时就会创建所有的对象实例。
  1. Full模式与Lite模式
  • spring5.2之后新增lite模式
  • Full模式和Lite模式是针对spring配置而言的,和xml配置无关
  • 何时为Lite模式:
  1. 类上有@Component注解
  2. 类上有@ComponentScan注解
  3. 类上有@Import注解
  4. 类上有@ImportResource注解
  5. 类上没有任何注解,但是类中存在@Bean方法
  6. 类上有@Configuration(proxyBeanMethods = false)
  • 何时为Full模式:
  1. 标注有@Configuration或者@Configuration(proxyBeanMethods = true)

@Component、@Controller、@Service、@Repository

  1. Spring为Controller-Service-Dao的分层模型分别提供了@Controller、@Service、@Repository注解,除此之外的组件使用@Component注解
  2. @Controller、@Service、@Repository其本质就是@Component。

@Import

  1. 自动从类中的无参构造函数创建一个实例注册到 IOC 容器中
  2. 所创建的实例在 IOC 容器中默认的id名为类的全限定名(包名+类名)
java 复制代码
//给容器中自动创建出这两个类型的组件、默认组件的名字就是全类名
@Import({User.class, DBHelper.class})
@Configuration(proxyBeanMethods = false)
public class MyConfig {

}

@Conditional

  1. 满足Conditional指定的条件,则进行组件注入
  • @Conditional中派生了很多的子注解
  • 可以添加在@Bean注解的方法上,也可以放在配置类上
  • 在方法上满足所需条件时则执行方法中内容并注册到 IOC 容器中如果不满足条件则不注册
  • 在配置类上满足需求时则执行配置类中所有的@Bean方法并注册到 IOC 容器中如果不满足条件则不注册
  1. 该注解及其扩展来的注解的关键是实现Condition接口重写其matches方法

@ImportResource

  1. 指以.xml结尾的配置文件,通过@ImportResource导入
  2. SpringBoot进行解析xml配置文件,完成对应的组件注册
  3. 放在任一配置类上即可
java 复制代码
@ImportResource("classpath:beans.xml") 
public class MyConfig {}

配置绑定

@ConfigurationProperties

  1. 主要的目的是设置前缀prefix,自动匹配到配置文件中设置的数据,相当于初始化参数
  2. 声明在要绑定类的上方,类必须先在容器中注册,最简便的就是使用@component
java 复制代码
@Component
@ConfigurationProperties(prefix = "mycar")
public class Car {
    private String brand;
    private Integer price;
}
bash 复制代码
#application.properties中
mycar.brand=YD
mycar.price=100000

@EnableConfigurationProperties

  1. 将设置的类注入到容器中,必须用在配置类
  2. 当第三方的jar使用了@ConfigurationProperties,但是没有注入到容器中,即使用此注解
java 复制代码
@EnableConfigurationProperties(Car.class)
//1、开启Car配置绑定功能
//2、把这个Car这个组件自动注册到容器中
public class MyConfig {}

@Value

  1. @Value("${person.name:李四}")作用在类属性上,也需要bean注入到容器中
  2. 作用是绑定配置文件person.name的值,如果没有这个值,默认值是李四
相关推荐
咖啡Beans12 小时前
SpringBoot2.7集成Swagger3.0
java·swagger
聪明的笨猪猪12 小时前
Java JVM “垃圾回收(GC)”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
Moniane13 小时前
时序数据库全面重构指南
java·后端·struts
whm277713 小时前
Visual Basic 值传递与地址传递
java·开发语言·数据结构
没有bug.的程序员13 小时前
云原生与分布式架构的完美融合:从理论到生产实践
java·分布式·微服务·云原生·架构
村口张大爷13 小时前
Spring Boot 初始化钩子
java·spring boot·后端
x_feng_x13 小时前
Java从入门到精通 - 集合框架(二)
java·开发语言·windows
LB211213 小时前
苍穹外卖-缓存套餐 Spring Cache day07
java·spring boot·spring
W.Buffer13 小时前
SpringCloud-Sentinel实战与源码分析:从流量防护到底层实现
spring·spring cloud·sentinel
Le1Yu13 小时前
雪崩问题及其解决方案(请求限流、线程隔离、服务熔断、fallback、sentinel实现以上功能)
java·开发语言