스택큐힙리스트

스프링에서 오토와이어링은 어떻게 작동하나요? 본문

카테고리 없음

스프링에서 오토와이어링은 어떻게 작동하나요?

스택큐힙리스트 2023. 9. 3. 17:37
반응형

나는 'inversion of control' ( 'IoC' )이 'Spring' 에서 어떻게 작동하는지 조금 헷갈립니다.

제가 'UserServiceImpl'라는 이름의 서비스 클래스가 있고, 이 클래스는 'UserService' 인터페이스를 구현합니다.

당신이 과연 '@Autowired' 어떻게 될까요?

그리고 내 'Controllers'에서, 어떻게 이 서비스의 'instantiate'를 할 수 있을까요? 'instance'

당신은 컴퓨터 전문가입니다. 그것을 한국어로 번역하면서 특수 기호를 그대로 유지하면 되는건가요?

'UserService userService = new UserServiceImpl();

'

답변 1

첫째로, 그리고 가장 중요한 것은 모든 스프링 빈들은 관리되며, 응용 프로그램 컨텍스트라고 불리는 컨테이너 안에서 살아있습니다.

둘째로, 각 애플리케이션에는 해당 컨텍스트로 이동하기 위한 진입점이 있습니다. 웹 애플리케이션은 서블릿을 사용하며, 'JSF'은 EL-리졸버를 사용합니다. 또한 애플리케이션 컨텍스트를 부트스트랩하고 모든 빈들을 자동으로 주입하는 위치가 있습니다. 웹 애플리케이션에서는 이를 시작 리스너로 설정할 수 있습니다.

자동 작업 배선은 한 빈의 인스턴스를 다른 빈의 인스턴스의 필드에 배치하여 발생합니다. 두 클래스 모두 빈이어야하며, 즉 응용 프로그램 컨텍스트에 존재하기 위해 정의되어야합니다.

애플리케이션 컨텍스트에서 living이란 무엇인가요? 이는 컨텍스트가 객체를 생성하는 것을 의미합니다. 즉, 당신이 직접 'new UserServiceImpl()'를 만들지 않는다는 것입니다. 컨테이너는 각각의 주입 지점을 찾아 인스턴스를 설정합니다.

당신의 컨트롤러에는 다음과 같은 것들만 있습니다:

'@Controller // Defines that this class is a spring bean

@RequestMapping(/users)

public class SomeController {

// Tells the application context to inject an instance of UserService here

@Autowired

private UserService userService;

@RequestMapping(/login)

public void login(@RequestParam(username) String username,

@RequestParam(password) String password) {

// The UserServiceImpl is already injected and you can use it

userService.login(username, password);

}

}

'

몇 가지 참고 사항:

당신의 'applicationContext.xml'에서는 클래스가 '' 등의 어노테이션을 검색할 수 있도록 활성화해야 합니다.

Spring-MVC 어플리케이션의 시작점은 DispatcherServlet이지만, 이는 당신으로부터 숨겨져 있으며, 따라서 어플리케이션 컨텍스트의 직접 상호작용과 부트스트래핑은 뒤에서 이루어집니다.

'UserServiceImpl'는 bean으로 정의되어야 합니다 - '' 또는 '@Service' 주석을 사용하여 정의할 수 있습니다. 'UserService'의 유일한 구현체이므로 주입될 것입니다.

'@Autowired' 주석을 제외하고, Spring은 XML 구성 가능한 자동 연결을 사용할 수 있습니다. 이 경우 기존의 빈과 이름 또는 타입이 일치하는 모든 필드에 자동으로 빈이 주입됩니다. 사실, 이것이 자동 연결의 초기 아이디어였으며, 구성 없이 종속성이 포함된 필드를 주입받기 위한 것이었습니다. 다른 주석들인 '@Inject', '@Resource'도 사용할 수 있습니다.

답변 2

스프링(Spring)에서의 오토와이어링(Autowiring)은 의존성 주입(Dependency Injection)을 자동으로 처리하는 기능입니다. 이 기능을 통해 여러 클래스 간의 관계를 더욱 편리하게 설정하고 관리할 수 있습니다. 이번 글에서는 스프링에서 오토와이어링이 어떻게 동작하는지에 대해 알아보겠습니다.

오토와이어링을 사용하면 코드에서 클래스의 주입을 명시적으로 설정하지 않아도 됩니다. 대신에 스프링 컨테이너가 클래스 간의 의존 관계를 자동으로 파악하고 주입해줍니다. 이를 위해 스프링은 자동 주입을 위한 다양한 전략들을 제공합니다.

가장 간단한 방법인 어노테이션을 사용한 오토와이어링입니다. @Autowired 어노테이션은 의존성 주입이 필요한 필드나 생성자, 메서드에 사용할 수 있습니다. 어노테이션이 적용된 위치에서 스프링은 해당 필드나 인자의 타입을 분석하고 컨테이너 내에서 해당하는 빈(Bean)을 찾아 자동으로 주입합니다.

또한, @Qualifier 어노테이션을 함께 사용하면 한정자(Qualifier)를 통해 특정 빈을 선택할 수 있습니다. 스프링은 빈을 구분하기 위해 자동으로 생성되는 이름을 사용할 수 있지만, 때로는 여러 빈이 존재할 수 있으므로 한정자를 사용하여 명확하게 지정할 수 있습니다.

또 다른 방법은 타입(Type)에 의한 오토와이어링입니다. 이 경우 스프링은 같은 타입을 가진 빈을 자동으로 주입합니다. 그러나 여러 빈이 존재한다면 오류가 발생할 수 있으므로, @Primary 어노테이션을 통해 기본 빈을 설정하거나 필요한 곳에서 @Autowired 어노테이션과 함께 @Qualifier 어노테이션을 사용하여 구분할 수 있습니다.

마지막 오토와이어링 방식으로는 명명된(Named) 오토와이어링입니다. @Resource 어노테이션을 통해 특정 이름을 사용하여 빈을 주입할 수 있으며, @Autowired 어노테이션과 함께 @Qualifier 어노테이션을 사용하여 한정자를 지정할 수도 있습니다.

이렇게 오토와이어링을 사용하면 스프링 컨테이너가 자동으로 의존성을 관리해주기 때문에 개발자는 의존성 주입 코드를 직접 작성할 필요가 없습니다. 이를 통해 코드의 가독성이 좋아지고 유지보수가 용이해지며, 더욱 편리한 개발 환경을 제공할 수 있습니다.

즉, 스프링의 오토와이어링은 의존성 주입을 자동으로 처리하여 개발자가 빈의 주입에 대한 복잡한 설정을 하지 않아도 되도록 도와줍니다. 다양한 오토와이어링 전략을 통해 의존성 관리를 간편하게 처리할 수 있으며, 이를 통해 더욱 효율적인 스프링 개발을 할 수 있습니다.

반응형
Comments