@Component
설명: @Component
는 Spring이 관리하는 일반적인 빈(Bean)을 정의하는 데 사용됩니다.
특징:
사용법:
@Component
public class MyComponent {
// 클래스 내용
}
장단점:
@Service, @Repository, @Controller
설명 : @Component
의 특화된 형태로, 역할에 따라 구분됩니다.
특징:
사용법:
@Service
public class MyService {
// 클래스 내용
}
@Repository
public class MyRepository {
// 클래스 내용
}
@Controller
public class MyController {
// 클래스 내용
}
장단점:
- 장점: 역할을 명확히 구분하여 코드의 가독성을 높입니다.
- 단점: 특정 역할에 맞게 사용해야 합니다.
@Autowired
설명: Spring이 자동으로 빈을 주입하도록 하는 애노테이션입니다.
특징:
사용법:
필드 주입:
@Autowired
private MyService myService;
생성자 주입:
@Autowired
public MyClass(MyService myService) {
this.myService = myService;
}
세터 주입:
@Autowired
public void setMyService(MyService myService) {
this.myService = myService;
}
장단점:
- 장점: 자동으로 빈을 주입해주므로 코드가 간결해집니다.
- 단점: 순환 의존성 문제를 일으킬 수 있습니다.
@RequiredArgsConstructor (Lombok)
설명: final
필드와 @NonNull
필드에 대한 생성자를 자동으로 생성합니다.
특징:
사용법:
@RequiredArgsConstructor
public class MyClass {
private final MyService myService;
}
장단점:
- 장점: 생성자 주입을 간편하게 사용 가능합니다.
- 단점: Lombok 라이브러리에 의존합니다.
@RestController와 @RequestMapping
설명: @RestController
는 JSON/XML 형식으로 응답을 반환하는 컨트롤러를 정의합니다. @RequestMapping
은 요청 URL을 매핑합니다.
특징:
@RestController
는 @Controller
와 @ResponseBody
를 합친 형태입니다.@RequestMapping
은 HTTP 메서드(GET, POST 등)와 URL을 매핑합니다.사용법:
@RestController
@RequestMapping("/users")
public class UserController {
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping
public List<User> getAllUsers() {
return userService.getAllUsers();
}
}
장단점:
- 장점: RESTful 웹 서비스를 쉽게 개발할 수 있습니다.
- 단점: 단순한 웹 페이지를 반환할 때는
@Controller
와@ResponseBody
를 사용하는 것이 더 적합할 수 있습니다.
@Configuration
설명: Spring 설정 파일을 정의합니다.
특징:
사용법:
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
장단점:
- 장점: 설정을 명확히 정의할 수 있습니다.
- 단점: XML 설정보다 덜 직관적일 수 있습니다.
@Bean
설명: 메서드에서 반환된 객체를 빈으로 등록합니다.
특징:
@Configuration
클래스 내에서 사용됩니다.사용법:
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
장단점:
@Autowired
, @RequiredArgsConstructor
를 사용하여 빈을 주입.@RestController
, @RequestMapping
을 사용하여 RESTful 웹 서비스 개발.@Configuration
, @Bean
을 사용하여 설정과 빈 정의.