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的值,如果没有这个值,默认值是李四
相关推荐
Pitayafruit2 小时前
Spring AI 进阶之路05:集成 MCP 协议实现工具调用
spring boot·后端·llm
韩立学长3 小时前
【开题答辩实录分享】以《自助游网站的设计与实现》为例进行选题答辩实录分享
java·mysql·spring
ss2733 小时前
线程池:任务队列、工作线程与生命周期管理
java·后端
不像程序员的程序媛3 小时前
Spring的cacheEvict
java·后端·spring
SAP小崔说事儿3 小时前
在数据库中将字符串拆分成表单(SQL和HANA版本)
java·数据库·sql·sap·hana·字符串拆分·无锡sap
凌云若寒3 小时前
半导体代加工企业标签模板痛点的全景式解决方案
java
shoubepatien3 小时前
JAVA -- 11
java·后端·intellij-idea
利剑 -~4 小时前
jdk源码解析
java·开发语言
Predestination王瀞潞4 小时前
JDK安装及环境变量配置
java·linux·开发语言
谷哥的小弟4 小时前
Spring Framework源码解析——PropertiesLoaderUtils
java·后端·spring·框架·源码