@Configuration和@Component注解的区别

简介: 1.@Configuration和@Component注解的源码如下(1)Configuration注解源码如下:

@Configuration和@Component注解的区别



1.@Configuration和@Component注解的源码如下


(1)Configuration注解源码如下:


@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
    @AliasFor(
        annotation = Component.class
    )
    String value() default "";
    boolean proxyBeanMethods() default true;
}


(2)Component注解源码如下:


@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface Component {
    String value() default "";
}


(3)通过源码可以看出, @Configuration 注解本质上还是 @Component,只不过Configuration注解多了

boolean proxyBeanMethods() default true;这一行内容。


①@Configuration 中所有带 @Bean 注解的方法都会被动态代理(cglib),因此调用该方法返回的都是同一个实例 ②@Conponent 修饰的类不会被代理,每实例化一次就会创建一个新的对象。


2.Configuration注解的使用细节


(1)配置类里面使用@Bean标注在方法上给容器注册组件,默认是单实例的


(2)配置类本身也是组件


(3)proxyBeanMethods:代理bean的方法

Full(proxyBeanMethods = true)【保证每个@Bean方法被调用多少次返回的组件都是单实例的】

Lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】

组件依赖必须使用Full模式默认。其他默认是否Lite模式


(4)实例


@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件
public class MyConfig {
    @Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
    public User user(){
        User zhangsan = new User("zhangsan", 18);
        //user组件依赖了Pet组件
        zhangsan.setPet(tomcatPet());
        return zhangsan;
    }
    @Bean("tom")
    public Pet tomcatPet(){
        return new Pet("tomcat");
     } }


(5)最佳实战


①配置 类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断


②配置类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式

目录
相关文章
|
Java 容器 Spring
springboot中的@Configuration详解~
springboot中的@Configuration详解~
411 0
|
NoSQL Redis
31Redis - 如何启动多个Redis
31Redis - 如何启动多个Redis
276 0
|
4月前
|
人工智能 安全 API
MCP vs 传统集成方案:REST API、GraphQL、gRPC的终极对比
作为一名长期关注AI技术发展的博主摘星,我深刻感受到了当前AI应用集成领域正在经历的巨大变革。随着Anthropic推出的Model Context Protocol(MCP,模型上下文协议)逐渐成熟,我们不得不重新审视传统的系统集成方案。在过去的几年中,REST API凭借其简单易用的特性成为了Web服务的标准选择,GraphQL以其灵活的数据查询能力赢得了前端开发者的青睐,而gRPC则以其高性能的特点在微服务架构中占据了重要地位。然而,当我们将视角转向AI应用场景时,这些传统方案都暴露出了一些局限性:REST API的静态接口设计难以适应AI模型的动态需求,GraphQL的复杂查询机制在处
356 0
MCP vs 传统集成方案:REST API、GraphQL、gRPC的终极对比
|
4月前
|
缓存 算法 API
从 0 实现 API 接口签名验证系统:基于 HMAC-SHA256 的防篡改方案(附 Python 全代码)
本文介绍基于 的 API 接口签名验证系统,实现防篡改与防重放攻击,包含完整设计原理、签名生成规则及可运行的 Python 客户端与服务端代码,并提供安全性优化与部署建议。
|
5月前
|
Java 数据库 Spring
如何使用 SpringBoot 实现动态增删启停定时任务?
我是小假 期待与你的下一次相遇 ~
262 5
|
11月前
|
Java 数据库连接 Maven
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
自动装配是现在面试中常考的一道面试题。本文基于最新的 SpringBoot 3.3.3 版本的源码来分析自动装配的原理,并在文未说明了SpringBoot2和SpringBoot3的自动装配源码中区别,以及面试回答的拿分核心话术。
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
|
XML Java 测试技术
Spring Boot中的依赖注入和控制反转
Spring Boot中的依赖注入和控制反转
|
12月前
|
前端开发 Java 数据格式
SpringBoot中定义Bean的几种方式
本文介绍了Spring Boot中定义Bean的多种方式,包括使用@Component、@Bean、@Configuration、@Import等注解及Java配置类。每种方式适用于不同的场景,帮助开发者高效管理和组织应用组件。
409 0
|
XML Java 数据格式
|
设计模式 测试技术 容器
依赖注入与控制反转:理解与应用
【8月更文挑战第22天】
611 0