날아라쩡글이의 블로그입니다.

의존성 주입 (Dependency Injection: DI),setter주입 본문

중앙 HTA (2106기) story/spring java framwork story

의존성 주입 (Dependency Injection: DI),setter주입

날아라쩡글이 2021. 12. 24. 15:17
728x90
반응형

먼저 vo객체인 user에 대해서 생성자 , setter, getter메소드를  설정한다.
userService인 interface를 설정하고, implements를 해서 return으로 new User(매개변수 입력)한다.
 resources에는 spring의 의존성을 주입하기위한 context-1.xml파일을 생성한다. 
spring bean configuration으로 만든 파일로 생성하면 된다. 
그리고 UserController에 의존성객체인 private UserService userService; 를 입력한다. 현재까지는 new로 새로운 객체를 생성했지만 이제부터는 singleton객체로 만들어진 UserService로 사용할 예정이다.

  • 싱글턴패턴은 원래
    private static UserServiceImpl self = new UserServiceImpl();
    private UserServiceImpl(){}
    public static UserServiceImpl getInstance(){
    return self; 
    }
    를 사용했지만, 이제는 이 코드를 사용하지 않고, spring에게 위임을 해서 spring에서 객체 1개를 계속 재사용할 예정이다. 

그리고 UserController객체는 UserService타입의 객체를 전달받기 위한 setter메소드를 정의한다.

  • 무언가를 전달받기 위해 사용할 메소드이다. 

setter메소드를 만들면 조립할 준비를 완료 되었다. 


spring에서 setter메소드를 이용해서 의존성을 주입한다는 의미로 setter주입이라고 불린다. 

<bean id="userController" class="com.sample.controller.UserController">
<property name="userService" ref="userServiceImpl"></property>
</bean>
<bean id="userServiceImpl" class="com.sample.service.UserServiceImpl"></bean>

먼저 설정한 bean을 작성한다. id를 작성하고, class에는 경로를 작성한다. 
calss는 만들 클래스를 작성하고, id는 식별할 이름으로 성하면된다. 그러면 클래스 파일에 s가 표시되고, spring에게 위힘했다는 뜻이다. 
실제로 web은 설정정보가 많다. 그렇기 때문에 main에서 객체의 생성, 조립에 집중을 하지 않는다. 
spring Container안에서 생성된 것만 조립이 가능하다. property를 작성하고, Controller가 userService를 필요로 하기 때문에 Controller에 의존성을 주입한다. setter메소드에 작성함으로 적용했기 때문에 setter주입이라고 불린다. 
userController에서는 사용자의 정보를 출력해야하니까 userService가 필요하다. 

spring bean configuration

  • 애플리케이션 실행에 필요한 객체에 대한 정보를 설정하는 파일이다. 
  • <bean />태그를 이용해서 생성할 객체를 지정한다.
    <bean id="식별자" class="클래스의 전체경로" />
  • 스프링 컨테이너는 class 속성으로 지정된 클래스를 로딩해서 객체를 생성한다.
  • 스프링 컨테이너는 id 속성으로 지정된 값으로 생성한 객체를 고유하게 식별하고, 관리한다.
  • id 속성을 생략하면 클래스이름의 첫글자만 소문자로 변경한 이름이 id가 된다. 
    <bean class="com.sample.service.UserServiceImpl">
    여기에서 이름은 UserServiceImpl 여기에서 U만 u로 변경된 이름이 id가 된다.

Spring Container

  • spring bean configuration 파일 정보를 분석해서 객체를 생성/조립/보관하는 객체이다. 
  • 생성과 조립은 함께 하기 때문에 생성과 조립은 여기서 진행한다.
  • 스프링 컨테이너는 아래의 설정을 참조해서 UserController 클래스를 로딩해서 객체를 생성/보관한다. 
  • 스프링 컨테이너는 생성한 UserController객체를 "userController"식별자로 식별한다.
    id로 관리한다. 
  • beanGraph에 서로 떨어져 있다. 

여러 Controller에서 Service를 property에게 전달해주고, 조립한다.
의존성 주입이란 Dependency Injection으로 DI의 구현체이다. 
실행하기 위해 조립될 멤버변수와 setter메소드를 정의했다. 사용하기 위해서 의존한다. 

 

객체 생성과 조립

  • 객체는 많다. 불필요한 객체도 많아진다. 
  • Controller에서 객체는 많은 곳에서 사용한다. userService는 사용할 일이 생긴다. 객체를 new로 계속 생성하지 않고, spring에 주문서를 넣고, spring파일은 만들어서 보내준다. 객체의 생성, 조립을 걷어내고 xml로 만든다.
    xml은 구현된 것 끼리만 연관 지어 넣는다. 
    객체생성과 조립을 끊어내고, spring에게 위임한다. 
  • 재생산성과 확장성이 높아진다. 
  • 여러 경로처럼 다양한 조립의 방법이 존재하게 된다. 
  • 전자정부표준프레임워크는 이렇게 조작하고, 개발환경에 따라서 사용할 수도 안할 수도 있다. 

setter주입, setter메소드를 이용해서 주입한다. 

반응형

'중앙 HTA (2106기) story > spring java framwork story' 카테고리의 다른 글

spring framwork설명  (0) 2021.12.27
의존성 주입 (DI) 자동 주입  (0) 2021.12.27
전자전부표준프레임워크  (0) 2021.12.27
Spring framwork  (0) 2021.12.24
spring tool  (0) 2021.12.23
Comments