bean
-
1. 컴파일러 수준(Java 컴파일 타임)@Servicepublic class UserService { private final UserRepository userRepository; // 생성자 파라미터 주입 public UserService(UserRepository userRepository) { this.userRepository = userRepository; }} 컴파일러는 단순히 생성자에 UserRepository 타입 파라미터가 필요하다는 사실만 기록한다.즉, 바이트코드 수준에서는UserService 를 만들려면 UserRepository 타입 인자가 필수라는게 명시된다.userRepository 는 final 이라서 생성자 호출 시 반드시 초기화되어 있어..
Spring Bean 생성 동작 과정1. 컴파일러 수준(Java 컴파일 타임)@Servicepublic class UserService { private final UserRepository userRepository; // 생성자 파라미터 주입 public UserService(UserRepository userRepository) { this.userRepository = userRepository; }} 컴파일러는 단순히 생성자에 UserRepository 타입 파라미터가 필요하다는 사실만 기록한다.즉, 바이트코드 수준에서는UserService 를 만들려면 UserRepository 타입 인자가 필수라는게 명시된다.userRepository 는 final 이라서 생성자 호출 시 반드시 초기화되어 있어..
2025.09.11 -
Spring Boot3, Java17 기준이다. 🔁 전체 흐름 정리 Spring Boot 어플리케이션이 시작될 때 내부적으로 아래와 같은 과정이 진행된다. 1. @ComponentScan 동작Spring Boot 어플리케이션을 실행했을 때 Spring Boot 메인함수에 있는 @SpringBootApplication 어노테이션에있는 @ComponentScan 이 지정된 패키지를 탐색하면서 @Component, @Controller, @Service, @Repository 등을가진 클래스를 찾는다. 2. Bean 등록 (객체 생성 + 의존성 주입)@ComponentScan 에 의해 찾은 클래스들을 스프링 컨테이너에 Bean 등록한다.이때 의존성이 필요하면 생성자를 통해 주입하게 된다. (생성자 주입의 ..
Spring Boot 의 생성자 주입 시점과 순환참조Spring Boot3, Java17 기준이다. 🔁 전체 흐름 정리 Spring Boot 어플리케이션이 시작될 때 내부적으로 아래와 같은 과정이 진행된다. 1. @ComponentScan 동작Spring Boot 어플리케이션을 실행했을 때 Spring Boot 메인함수에 있는 @SpringBootApplication 어노테이션에있는 @ComponentScan 이 지정된 패키지를 탐색하면서 @Component, @Controller, @Service, @Repository 등을가진 클래스를 찾는다. 2. Bean 등록 (객체 생성 + 의존성 주입)@ComponentScan 에 의해 찾은 클래스들을 스프링 컨테이너에 Bean 등록한다.이때 의존성이 필요하면 생성자를 통해 주입하게 된다. (생성자 주입의 ..
2025.06.19 -
Spring Bean 을 등록하는 이유는 여러가지가 있다. 📌 장점 항목설명의존성 주입(DI)스프링이 객체를 관리해주므로 생성자 주입 등 다른 의존 객체도 자동 주입 가능싱글톤 유지기본적으로 Spring Bean 은 싱글톤으로 관리해 매번 새로 생성되지 않고 재사용AOP 사용 가능@Transactional, @Async 등 AOP 기능 사용 가능생명주기 관리@PostConstruct, @PreDestroy 등을 통해 초기화 및 종료 로직을 관리 가능유지보수 용이스프링 컨테이너가 관리하므로 설정, 테스트, 확장 등에 유리함 ✅ 1. @Component 기본적인 Bean 등록 어노테이션Spring 이 클래스파일 경로를 스캔할 때(@ComponentScan) Bean 등록을 위한 어노테이션들이 붙은 클..
Spring Bean 등록을 위한 어노테이션(@Component, @Controller, @Service, @Repository, @Configuration+@Bean)Spring Bean 을 등록하는 이유는 여러가지가 있다. 📌 장점 항목설명의존성 주입(DI)스프링이 객체를 관리해주므로 생성자 주입 등 다른 의존 객체도 자동 주입 가능싱글톤 유지기본적으로 Spring Bean 은 싱글톤으로 관리해 매번 새로 생성되지 않고 재사용AOP 사용 가능@Transactional, @Async 등 AOP 기능 사용 가능생명주기 관리@PostConstruct, @PreDestroy 등을 통해 초기화 및 종료 로직을 관리 가능유지보수 용이스프링 컨테이너가 관리하므로 설정, 테스트, 확장 등에 유리함 ✅ 1. @Component 기본적인 Bean 등록 어노테이션Spring 이 클래스파일 경로를 스캔할 때(@ComponentScan) Bean 등록을 위한 어노테이션들이 붙은 클..
2025.06.11 -
Spring 에서 Bean 은 싱글톤형태로 관리되는 객체를 의미하며 빌드 시 Spring 은 Bean 을 등록하는 과정을 거치게 된다. 프로젝트를 진행하다가 발생한 에러는 아래와 같다. 가려진 부분의 이름을 가진 Bean 을 찾지 못해서 발생한 에러이다. 에러가 발생 내용은 Service 어노테이션을 가진 2개의 클래스는 Maven Profile 별로 Bean 생성을 처리하기 위해서@Profile 어노테이션을 사용했다. 1개의 Service 는 개발자를 위해 dev 와 local Profile 을 설정했다. 또 하나는 배포 및 운영에서 사용할 Profile 을 적용했다. 하지만 실제로는 "real" Profile 을 가진 Service 클래스를 Bean 클래스에서 사용을 하고 있었으며Bean 으로 등록이..
org.springframeworkbeans.factory.NoSuchBeanDefinitionException (Bean 을 찾을 수 없는 에러)Spring 에서 Bean 은 싱글톤형태로 관리되는 객체를 의미하며 빌드 시 Spring 은 Bean 을 등록하는 과정을 거치게 된다. 프로젝트를 진행하다가 발생한 에러는 아래와 같다. 가려진 부분의 이름을 가진 Bean 을 찾지 못해서 발생한 에러이다. 에러가 발생 내용은 Service 어노테이션을 가진 2개의 클래스는 Maven Profile 별로 Bean 생성을 처리하기 위해서@Profile 어노테이션을 사용했다. 1개의 Service 는 개발자를 위해 dev 와 local Profile 을 설정했다. 또 하나는 배포 및 운영에서 사용할 Profile 을 적용했다. 하지만 실제로는 "real" Profile 을 가진 Service 클래스를 Bean 클래스에서 사용을 하고 있었으며Bean 으로 등록이..
2024.10.28