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的值,如果没有这个值,默认值是李四
相关推荐
桦说编程10 分钟前
Guava 迭代器增强类介绍
java·后端·设计模式
2351638 分钟前
【JVM】Java为啥能跨平台?JDK/JRE/JVM的关系?
java·开发语言·jvm·spring boot·后端·spring·职场和发展
courtfu1 小时前
Plugin ‘mysql_native_password‘ is not loaded`
java·后端
枫子有风1 小时前
Go语言流程控制
android·java·golang
小裕哥略帅2 小时前
订单管理--实时算出在途数量、收货数量、到货数量、已发货数量和未发货数量
java·开发语言
Dxxyyyy2 小时前
零基础学JAVA--Day27(注释+异常+异常处理方法)
java·开发语言
Craaaayon2 小时前
如何选择两种缓存更新策略(写缓存+异步写库;写数据库+异步更新缓存)
java·数据库·redis·后端·缓存·mybatis
AAA卷不动了2 小时前
JVM(二)------ 类加载、初始化与单例模式的联系
java·jvm·单例模式
一 乐2 小时前
点餐|智能点餐系统|基于java+ Springboot的动端的点餐系统小程序(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·小程序·论文
少许极端3 小时前
算法奇妙屋(十)-队列+宽搜(BFS)
java·数据结构·算法·bfs·宽度优先·队列