Table of Contents
call setBeanName().
application context setBeanName(). When registering Bean, it associates its name with Bean (explicitly defined or automatically generated).
Practice example
bean definition
bean implementation
Home Java javaTutorial spring-: who-calls-setBeanName()?

spring-: who-calls-setBeanName()?

Jan 28, 2025 pm 10:05 PM

spring-: who-calls-setBeanName()?

The Spring framework is in the Bean initialization stage. As part of the Spring Bean life cycle, the

method is called. This will happen automatically if Bean implement the interface. setBeanName(String beanName) BeanNameAware The following is a detailed explanation of when when, who and how to call:

setBeanName() Who calls ?


Spring IOC (control reversal) container

call setBeanName().

When Bean is initialized and registered to the Spring context, the Spring container checks whether Bean has implemented the interface. If it is implemented, Spring will automatically call the method and transmit the setBeanName() Bean name

defined in the configuration or default

Bean name BeanNameAware. setBeanName() When is it called?


setBeanName() Bean initialization stage

:
  1. After

    Bean instantiated, But In any other initialized callback

    (such as

    or setBeanName()) before call. @PostConstruct InitializingBean.afterPropertiesSet() The order of the event :

    The surrounding life cycle events are shown below:
  2. Spring container instantiated bean. Spring determines the name of the bean from the configuration (such as

    or

    ). setBeanName()

    If bean is implemented, the
      method is called, and the name of the bean is passed as a parameter.
    1. Relying on injection and other initialization operations.
    2. @Bean @Component
    3. BeanNameAware How to call Spring setBeanName()?
    Bean's registration period
  3. :

Spring register all bean to the

application context setBeanName(). When registering Bean, it associates its name with Bean (explicitly defined or automatically generated).

  1. Check :

    During the initialization period, Spring will check whether bean has achieved . If so, Spring will automatically call the method.

  2. Pass the name of the bean : BeanNameAware The name of the bean passed to is:

    BeanNameAware The name specified in the configuration (setBeanName() or

    ).
  3. The default name generated by Spring (e.g., class name, first letter sketch:

    corresponding ).

    setBeanName()

      Simplified code process
    • @Bean(name = "myBean") The following is the way Spring calls @Component("myBean") in the Bean's life cycle:
    • // Spring容器初始化(伪代码)
      public class BeanFactory {
          public Object createBean(Class<?> beanClass, String beanName) {
              // 步骤1:实例化bean
              Object bean = instantiateBean(beanClass);
      
              // 步骤2:检查bean是否实现了BeanNameAware
              if (bean instanceof BeanNameAware) {
                  // 步骤3:调用setBeanName()并传递bean的名称
                  ((BeanNameAware) bean).setBeanName(beanName);
              }
      
              // 步骤4:继续进行依赖注入和其他生命周期回调
              injectDependencies(bean);
              initializeBean(bean);
      
              return bean;
          }
      }
      Copy after login

      Practice example

      bean definition

      @Configuration
      public class AppConfig {
      
          @Bean(name = "tenantA-dataSource")
          public TenantDataSource tenantADataSource() {
              return new TenantDataSource();
          }
      }
      Copy after login

      bean implementation

      import org.springframework.beans.factory.BeanNameAware;
      
      public class TenantDataSource implements BeanNameAware {
          private String tenantName;
          private String databaseUrl;
      
          @Override
          public void setBeanName(String beanName) {
              // 从bean名称中提取租户名称
              if (beanName.contains("-")) {
                  this.tenantName = beanName.split("-")[0];
              } else {
                  throw new IllegalArgumentException("无效的bean命名约定。预期格式:<tenantname>-dataSource");
              }
      
              // 根据租户名称动态分配数据库URL
              this.databaseUrl = "jdbc:mysql://localhost:3306/" + tenantName + "_db";
              System.out.println("setBeanName() called for: " + beanName + ", resolved tenant: " + tenantName);
          }
      
          public void connect() {
              System.out.println("Connecting to database: " + databaseUrl);
          }
      }
      Copy after login

      Main application <主>

      import org.springframework.context.ApplicationContext;
      import org.springframework.context.annotation.AnnotationConfigApplicationContext;
      
      public class Main {
          public static void main(String[] args) {
              // 初始化Spring上下文
              ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
      
              // 获取bean
              TenantDataSource tenantA = (TenantDataSource) context.getBean("tenantA-dataSource");
      
              // 使用bean
              tenantA.connect();
          }
      }
      Copy after login
      Output <输>

      <code>setBeanName() called for: tenantA-dataSource, resolved tenant: tenantA
      Connecting to database: jdbc:mysql://localhost:3306/tenantA_db</code>
      Copy after login
      Use case

      setBeanName()

      Dynamic configuration
      :
    1. Use the name of the bean to associate (such as the attributes specific to the tenants).

      Debug

      :
    2. Add debugging or log records according to the name of the bean.

      Programming custom

      :

    3. Dynamically modify Bean behavior according to the Bean name.
    4. When to avoid the use of

    For most applications, it is more practical to rely on
    or external configuration.

    setBeanName() Avoid the logic too complicated by hard -coding Bean name dependencies. For this kind of situation, it is best to use an external configuration source or dynamic routing.

    The above is the detailed content of spring-: who-calls-setBeanName()?. For more information, please follow other related articles on the PHP Chinese website!

    Statement of this Website
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

    Hot AI Tools

    Undresser.AI Undress

    Undresser.AI Undress

    AI-powered app for creating realistic nude photos

    AI Clothes Remover

    AI Clothes Remover

    Online AI tool for removing clothes from photos.

    Undress AI Tool

    Undress AI Tool

    Undress images for free

    Clothoff.io

    Clothoff.io

    AI clothes remover

    Video Face Swap

    Video Face Swap

    Swap faces in any video effortlessly with our completely free AI face swap tool!

    Hot Tools

    Notepad++7.3.1

    Notepad++7.3.1

    Easy-to-use and free code editor

    SublimeText3 Chinese version

    SublimeText3 Chinese version

    Chinese version, very easy to use

    Zend Studio 13.0.1

    Zend Studio 13.0.1

    Powerful PHP integrated development environment

    Dreamweaver CS6

    Dreamweaver CS6

    Visual web development tools

    SublimeText3 Mac version

    SublimeText3 Mac version

    God-level code editing software (SublimeText3)

    Is the company's security software causing the application to fail to run? How to troubleshoot and solve it? Is the company's security software causing the application to fail to run? How to troubleshoot and solve it? Apr 19, 2025 pm 04:51 PM

    Troubleshooting and solutions to the company's security software that causes some applications to not function properly. Many companies will deploy security software in order to ensure internal network security. ...

    How to elegantly obtain entity class variable names to build database query conditions? How to elegantly obtain entity class variable names to build database query conditions? Apr 19, 2025 pm 11:42 PM

    When using MyBatis-Plus or other ORM frameworks for database operations, it is often necessary to construct query conditions based on the attribute name of the entity class. If you manually every time...

    How to simplify field mapping issues in system docking using MapStruct? How to simplify field mapping issues in system docking using MapStruct? Apr 19, 2025 pm 06:21 PM

    Field mapping processing in system docking often encounters a difficult problem when performing system docking: how to effectively map the interface fields of system A...

    How does IntelliJ IDEA identify the port number of a Spring Boot project without outputting a log? How does IntelliJ IDEA identify the port number of a Spring Boot project without outputting a log? Apr 19, 2025 pm 11:45 PM

    Start Spring using IntelliJIDEAUltimate version...

    How do I convert names to numbers to implement sorting and maintain consistency in groups? How do I convert names to numbers to implement sorting and maintain consistency in groups? Apr 19, 2025 pm 11:30 PM

    Solutions to convert names to numbers to implement sorting In many application scenarios, users may need to sort in groups, especially in one...

    How to safely convert Java objects to arrays? How to safely convert Java objects to arrays? Apr 19, 2025 pm 11:33 PM

    Conversion of Java Objects and Arrays: In-depth discussion of the risks and correct methods of cast type conversion Many Java beginners will encounter the conversion of an object into an array...

    How to convert names to numbers to implement sorting within groups? How to convert names to numbers to implement sorting within groups? Apr 19, 2025 pm 01:57 PM

    How to convert names to numbers to implement sorting within groups? When sorting users in groups, it is often necessary to convert the user's name into numbers so that it can be different...

    What is the difference between memory leaks in Java programs on ARM and x86 architecture CPUs? What is the difference between memory leaks in Java programs on ARM and x86 architecture CPUs? Apr 19, 2025 pm 11:18 PM

    Analysis of memory leak phenomenon of Java programs on different architecture CPUs. This article will discuss a case where a Java program exhibits different memory behaviors on ARM and x86 architecture CPUs...

    See all articles