spring boot 三:1.组件添加-底层注解@Configuration详解

本文详细介绍了Spring Boot中@Configuration注解的使用方法及其对组件管理的影响。通过具体示例展示了如何利用@Bean注解向Spring容器注册组件,并探讨了proxyBeanMethods属性在不同设置下对组件实例化方式的影响。

spring boot 三:1.组件添加-底层注解@Configuration详解

1 @Configuration
在这里插入图片描述

package com.xiaoxu.boot.bean;

public class User {
    private String name;
    private Integer age;

    public User(){

    }

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }
}

tips:
idea:getter\setter快捷键形成
进入类:
在这里插入图片描述
alt+insert
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再在bean目录下新增一个类:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package com.xiaoxu.boot.config;

import com.xiaoxu.boot.bean.Pet;
import com.xiaoxu.boot.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration//告诉SpirngBoot这是一个配置类 == 配置文件
public class MyConfig {

    @Bean  //给容器中添加组件
    //以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
    public User user01(){
        return new User("xiaoxu",27);
    }

    @Bean
    public Pet tomcatPet(){
        return new Pet("tomcat");
    }
}

然后运行主程序打印组件(可以通过方法名搜索)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以对组件取别名:
在这里插入图片描述
然后重新运行,tomcatPet就被替换为xiaoxu_tomcat:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置类也是容器中的一个组件:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到,注解Configuration里面有proxyBeanMethods(),默认为true
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
MyConfig.java:

package com.xiaoxu.boot.config;

import com.xiaoxu.boot.bean.Pet;
import com.xiaoxu.boot.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/*
* 1.配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单例的
* 2.配置类本身也是组件
* 3.proxyBeanMethods:代理bean的方法
*
* */
@Configuration(proxyBeanMethods = true)//告诉SpirngBoot这是一个配置类 == 配置文件
public class MyConfig {
    /*
    * 外部无论对配置类中的这个组件注册方法调用多少次,获取的都是之前注册容器中的单实例
    * */
    @Bean  //给容器中添加组件
    //以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
    public User user01(){
        return new User("xiaoxu",27);
    }

    @Bean("xiaoxu_tomcat")
    public Pet tomcatPet(){
        return new Pet("tomcat");
    }
}

在这里插入图片描述
如果把代理设置为false:
在这里插入图片描述
在这里插入图片描述
因为配置类本身也是组件,修改配置类的注解@Configuration(proxyBeanMethods = false),那么该配置类下的组件(@Bean修饰的组件方法),就不会是单例的

tips:idea修改注释的颜色
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
组件依赖,举例:
在bean下的User加上如下:
在这里插入图片描述
重写toString:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果改为false:
在这里插入图片描述
在这里插入图片描述
总结:Full模式和Lite模式
1.配置类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断
2.配置类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式
3.Lite模式:@Configuration(proxyBeanMethods = false),非单实例模式;Full模式:@Configuration(proxyBeanMethods = true),单实例模式

2025-10-28 14:53:55.118 |-INFO [main] [] org.apache.zookeeper.ZooKeeper [] -| Session: 0x100f2a6b2010003 closed 2025-10-28 14:53:55.127 |-INFO [main-EventThread] [] org.apache.zookeeper.ClientCnxn [] -| EventThread shut down for session: 0x100f2a6b2010003 2025-10-28 14:53:55.130 |-INFO [main] [] org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer [] -| Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled. 2025-10-28 14:53:55.130 |-INFO [main] [] com.hundsun.amop.fafacade.server.FacadeServiceApplication [] -| ************************* Server Started ************************************* 2025-10-28 14:53:55.757 |-ERROR [main] [] org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter [] -| *************************** APPLICATION FAILED TO START *************************** Description: Field jdbcTemplate in com.hundsun.amop.fafacade.server.util.DataCenterInterfaceFieldUtil required a bean of type 'org.springframework.jdbc.core.JdbcTemplate' that could not be found. Action: Consider defining a bean of type 'org.springframework.jdbc.core.JdbcTemplate' in your configuration. 2025-10-28 14:53:55.761 |-INFO [CloudStopListener-Shutdown] [] com.hundsun.amop.fafacade.server.FacadeServiceApplication [] -| ************************* Server Stopping ************************************* 2025-10-28 14:53:55.761 |-INFO [DubboShutdownHook] [] com.alibaba.dubbo.config.AbstractConfig [] -| [DUBBO] Notify IAR that current server is shutting down, dubbo version: 2.0.32.2, current host: 10.45.14.138 2025-10-28 14:53:55.761 |-INFO [DubboShutdownHook] [] com.alibaba.dubbo.config.AbstractConfig [] -| [DUBBO] Run shutdown hook now., dubbo version: 2.0.32.2, current host: 10.45.14.138 2025-10-28 14:53:55.761 |-INFO [DubboShutdownHook] [] com.alibaba.dubbo.registry.support.AbstractRegistryFactory [] -| [DUBBO] Close all registries [], dubbo version: 2.0.32.2, current host: 10.45.14.138
最新发布
10-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值