Spring에서 Bean
은 IoC(Inversion of Control) 컨테이너가 관리하는 객체를 의미하며, 개발자는 특정 클래스나 객체를 Bean으로 등록하여 Spring 컨테이너가 이 객체를 생성하고 관리하도록 합니다.
@Component
, @Controller
, @Service
, @Repository
는 Spring에서 특정 클래스가 Bean으로 등록되도록 알려주는 스테레오타입 애노테이션입니다. 이 애노테이션들은 역할에 따라 구분되며, Spring의 기능을 보다 명확하고 체계적으로 관리할 수 있게 돕습니다.
<bean id="exampleBean" class="com.example.ExampleClass" />
@Configuration
+ @Bean
) @Configuration
public class AppConfig {
@Bean
public ExampleClass exampleBean() {
return new ExampleClass();
}
}
@Component
등) @Component
public class MyComponent {
public void execute() {
System.out.println("Component executed.");
}
}
역할
특징
@RequestMapping
이나 @GetMapping
, @PostMapping
등과 함께 사용.사용 예시
@Controller
public class MyController {
@GetMapping("/hello")
public String sayHello() {
return "hello";
}
}
@Component
와 동일하게 Bean으로 등록되지만, 명확한 역할 분리를 위해 사용.@Service
public class MyService {
public String processLogic() {
return "Business Logic Processed";
}
}
@Component
와 동일하게 Bean으로 등록.@Repository
public class MyRepository {
public List<String> fetchData() {
return List.of("Data1", "Data2");
}
}
@Component
는 가장 기본적인 애노테이션으로 역할에 관계없이 모든 클래스에 사용할 수 있습니다.@Controller
, @Service
, @Repository
는 특정 역할을 수행하는 클래스를 나타내며, 명확한 의미를 부여하기 위해 사용됩니다.애노테이션 | 용도 | 특징 |
---|---|---|
@Component | 범용 클래스 | Spring Bean으로 등록. 특정 역할에 제한 없음. |
@Controller | 요청/응답 처리 컨트롤러 | Spring MVC와 연동, 요청 매핑 기능 활성화. |
@Service | 비즈니스 로직 처리 클래스 | 비즈니스 계층 역할 담당. 코드의 가독성과 계층 구조 명확화. |
@Repository | 데이터 액세스 계층 | DAO 역할 수행. 예외 변환 기능 제공. |
@Component
는 가장 일반적인 애노테이션으로 모든 역할에 사용할 수 있지만, 역할에 따라 세부 애노테이션을 사용하여 코드의 의미를 명확히 하는 것이 좋습니다.추가 학습 자료
-Spring Bean Annotations
-@RequestMapping without @Controller registered as handler [SPR-17622]
-General ORM Integration Considerations