다음은 언제 시기, 누가, 어떻게 전화 해야하는지에 대한 자세한 설명입니다.
스프링 IOC (Control Reversal) 컨테이너 를 전송합니다. Bean Instantantiated 이후, 그러나 에서 (예 :
:
setBeanName(String beanName)
호출 . BeanNameAware
setBeanName()
:
setBeanName()
setBeanName()
또는 ) 호출. BeanNameAware
setBeanName()
이벤트의 순서 :
주변 수명주기 사건은 다음과 같습니다.
또는 ).
setBeanName()
setBeanName()
@PostConstruct
점검 InitializingBean.afterPropertiesSet() :
초기화 기간 동안 Spring은 Bean이 를 달성했는지 확인합니다. 그렇다면 Spring은 자동으로 메소드를 호출합니다. setBeanName()
단순화 된 코드 프로세스
<the> 다음은 콩의 수명주기에서 스프링을 호출하는 방법입니다.<pre class='brush:php;toolbar:false;'>// 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;
}
}</pre>
<hr>
<h3> 연습 예
</h3> bean 정의
<h4>
Bean 구현
</h4>
메인 응용 프로그램
<pre class='brush:php;toolbar:false;'>@Configuration
public class AppConfig {
@Bean(name = "tenantA-dataSource")
public TenantDataSource tenantADataSource() {
return new TenantDataSource();
}
}</pre>
출력
<h4>
</h4>
사용 사례
<pre class='brush:php;toolbar:false;'>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);
}
}</pre>
<h4>
동적 구성 </h4> :
<of> 콩의 이름을 사용하여 연관성 (예 : 임차인과 관련된 속성)을 사용하십시오. <pre class='brush:php;toolbar:false;'>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();
}
}</pre>
<h4>
</h4>
디버그 <pre class="brush:php;toolbar:false"><code>setBeanName() called for: tenantA-dataSource, resolved tenant: tenantA
Connecting to database: jdbc:mysql://localhost:3306/tenantA_db</code></pre> :
<ging> 콩 이름에 따라 디버깅 또는 로그 레코드를 추가하십시오. <hr>
<h3>
<code>setBeanName()
프로그래밍 커스텀 :
위 내용은 Spring- : Who-Calls-setbeanname ()?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

SpringBoot 프로젝트에서 데이터를 전송하기 위해 타사 인터페이스를 호출 할 때 발생하는 어려움은 스프링에 사용됩니다 ...

Intellij에서 ...

그룹 내에서 정렬을 구현하기 위해 이름을 숫자로 변환하는 방법은 무엇입니까? 그룹으로 사용자를 정렬 할 때는 종종 사용자 이름을 숫자로 변환하여 다르게 만들 수 있습니다 ...

Java 원격 디버깅의 지속적인 획득에 대한 질문과 답변 원격 디버깅에 Java를 사용할 때 많은 개발자가 어려운 현상을 만날 수 있습니다. 그것...

백엔드 개발에서 계층 구조에 대해 논의합니다. 백엔드 개발에서 계층 구조는 일반적으로 컨트롤러, 서비스 및 DAO 3 계층을 포함한 일반적인 설계 패턴입니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

WebStorm Mac 버전
유용한 JavaScript 개발 도구

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.
