Java/Spring

스프링 DI

상상모음 2025. 3. 29. 15:43
빈 설정 예제

applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 데이터베이스 설정 -->
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/board_db"/>
        <property name="username" value="root"/>
        <property name="password" value="1234"/>
    </bean>

    <!-- DAO -->
    <bean id="boardRepository" class="com.example.board.repository.BoardRepository">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- 서비스 -->
    <bean id="boardService" class="com.example.board.service.BoardService">
        <property name="boardRepository" ref="boardRepository"/>
    </bean>

</beans>

1. 메이븐 프로젝트 생성

2. pom.xml - Spring Framework 관련 의존성 추가 (spring-context, spring-jdbc) 등 작성

3. 프로젝트 메이븐 업데이트

4. src/main/resource에 applicationContext.xml 파일 생성

 

 

 

빈으로 스프링 컨테이너 생성 

스프링 빈 설정 (데이터베이스 설정, 서비스 객체 설정 등)

대충 빈즈 < 빈(여러개 또는 하나) < 프로퍼티(빈안에 여러개 또는 하나) < 리스트(값), 맵(키,값) 등등

데이터베이스 설정이나서비스 설정 코드를 작성하고 

제네릭엑스엠엘앱컨텍스트 클래스 임포트 하고 뉴 생성자주입하고

겟 빈 해서 applicationContext.xml에 작성했던 스프링컨테이너에서 빈 객체를 가져다 쓴다.

GenericXmlApplicationContext ctx =

new GenericXmlApplicationContext("classpath:applicationContext.xml");

BoardsService bs = ctx.getBean("BoardService",BoardsService);

beans 태그 안에 여러 개의 bean 태그가 들어가고, 각 bean은 property를 가질 수 있어요.
리스트(List)나 맵(Map) 같은 컬렉션을 프로퍼티로 설정하는 것도 가능하지만, jdbcUrl 같은 설정은 개별 빈으로 설정해야 해요.

GenericXmlApplicationContext는 XML 설정을 로드하는 컨테이너예요.
new GenericXmlApplicationContext("classpath:applicationContext.xml"); 를 사용하면 스프링 컨테이너가 초기화되지만, 보통 ApplicationContext 인터페이스로 참조하는 것이 일반적이에요.

 

빈 객체 가져오기

1.스프링 컨테이너(ApplicationContext) 생성
ApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationContext.xml");
 
applicationContext.xml을 로드하여 빈을 관리하는 스프링 컨테이너 생성
 
2. 빈 객체 가져오기
BoardService bs = ctx.getBean("boardService", BoardService.class);
  • getBean("id", 클래스) 메서드를 사용하여 스프링 컨테이너에서 빈을 가져옴
  • BoardService 클래스 타입을 지정하면 형 변환 불필요
  • ctx.getBean("boardService") 도 가능하지만, 반환 타입을 지정하는 것이 안전함

 

 

 

 

  • jdbcUrl 같은 설정이 리스트나 맵이 아니라 개별 속성으로 관리됨
  • getBean() 호출할 때 클래스 타입을 지정하는 것이 더 안전함

 

  • 스프링 컨테이너(ApplicationContext)가 빈을 관리
  • 각 빈은 @Autowired(어노테이션 방식) 또는 property(XML 방식)으로 다른 빈을 주입받음
  • XML 설정을 기반으로 GenericXmlApplicationContext를 통해 스프링 컨테이너를 생성
  • ctx.getBean("id", 클래스명.class)로 빈을 가져옴

지금도 개념을 잘 잡고 있는데, "jdbcUrl 같은 설정은 리스트가 아니라 속성으로 설정한다", "getBean() 사용 시 타입을 지정하면 더 안전하다"