Spring Bean Configuration.xml 설정

기본 Spring Bean Configuration.xml에 대한 설정정보와 설정방법들에 대한 페이지

Intro

  • Spring Bean Configuration.xml에는 Spring IOC Container(Root Application Context)에서 관리할 bean객체들에 대한 정보를 기술한다.

  • Root Application Context에는 어플리케이션 전체에서 공용으로 사용할 Bean객체들을 등록한다.

1. root-context.xml

  • root-context.xml은 어플리케이션 전역에서 사용할 bean객체를 생성 및 설정하는 파일이다. db와 연결된 bean객체, Controller에서 사용할 service, repository객체등도 이곳에서 정의한다.

<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 https://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

태그 살펴보기

  1. <beans xmlns="http://www.springframework.org/schema/beans"> 
    xml의 기본 스키마 설정. 현재 문서에서는 beans접두어를 붙이지 않아도 beans내부이 태그를 이용할
    수 있게끔 해주는 속성이다.
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    XMLSchema-instance의 정보를 선언하는 부분
  3. xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
    선언된 스키마정보들의 Location을 정의하는 부분.
    

모듈 추가하기

  • 다른 모듈을 추가로 설치해야한다면 xml문서의 Namespace로 넘어가 사용할 모듈을 선택하면 된다.

모듈 선택 완료시 아래와 같이 context와 관련된 모듈을 사용할 수 있다.

root-context.xml context-scan시

데이터베이스 연결하기

  • myBatis프로젝트시 mybatis-config.xml에서 하던 작업을 root-context.xml문서에서 진행한다.

  • db와 연결된 sqlSession을 전역(Context)에 생성해두고 DB와 연결이 필요한 dao, 테스트 모듈 등에서 의존성 주입(DI)을 진행한다.

1단계 ) DataSource생성

 <!-- 1단계) DB연결을 위한 도구 설정 -->
 <bean class="org.apache.commons.dbcp.BasicDataSource" id="dataSource" destroy-method="close">
 	<property name="driverClassName" value="${your.driverClassName}" />
 	<property name="url" value="${your.url}" />
 	<property name="username" value="${your.username}" />
 	<property name="password" value="${your.password}" />	 	
 </bean>
  • 사용하고자하는 드라이버정보, URL, 계정, 비밀번호 정보를 추가하여 BasicDataSource객체를 생성한다. * BasicDataSource? 내부적으로 커넥션 풀을 구현한 오픈소스 라이브러이다

태그명
태그기능

bean

스프링컨테이너에 class의 속성값으로 기술된 클래스를 등록하는 역할을한다. 태그내부에 constructor-arg태그가 없다면 "기본 생성자"를 호출하여 객체를 생성한다.

property

bean객체를 초기화시키는 역할을 한다.

name속성에 기술된 속성값을 value속성에 기술한 값으로 초기화시킨다.

생성된 객체의 setter함수를 호출하는 방식으로 작동한다

  • 위 코드를 java로 해석하자면 아래와 같음

  • BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName("xxxx"); dataSource.setUrl("xxxx"); dataSource.setUsername("xxxx"); dataSource.setPassword("xxxx");

  • 즉 자바의 객체로 인스턴스화 된 후 스프링 컨테이너에 의해 관리된다는 것이며, 이렇게 스프링 컨테이너에 의해 관리되는 자바 객체는 Bean객체라고 불린다.

2단계 ) Mybatis Spring에서 제공하는 sqlSessionFactoryBean객체 생성

  • sqlSessionFactoryBean객체는 mybatis의 sqlSessionFactory역할을 하는 Spring의 Bean객체이다. mybtis-config.xml의 문서를 읽어 들여서 sqlSession객체를 반환해주는 역할을 한다.

<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
 	<!-- mybatis 설정파일 위치 지정 -->
 	<property name="configLocation" value="classpath:mybatis-config.xml" />
 		
 	<!-- DB연결을 위한 도구 등록  -->
 	<property name="dataSource" ref="dataSource" />
 	<!-- mapper파일을 읽어올 경로 -->
 	<property name="mapperLocations" value="classpath*:mapper/**/*.xml" />
 </bean>
  • <property name="dataSource" ref="dataSource" /> 코드에서 ref는 bean객체의 id값을 의미한다.
    xml에서 bean객체를 주입받고자 할때는 ref에 속성값으로 bean객체의 id를 제시하면 된다.

3단계) SqlSessionTemplate 객체 생성

  • SqlSessionTemplate은 스프링 컨테이서에서 제공하는 템플릿으로 sql구문을 실행하기 위한 SqlSession객체를 제공한다

<bean class="org.mybatis.spring.SqlSessionTemplate" id="sqlSession">
 	<constructor-arg ref="sqlSessionFactory" />
</bean>
 
 <!-- 트랜잭션을 대신관리해주는 bean객체-생성->
 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 	<property name="dataSource" ref="realDataSource"/>
 </bean> 
태그명
태그기능

constructor-arg

bean객체 내부에 constructor-arg태그가 존재할경우 기본생성자 방식이 아닌 매개변수 있는 생성자 방식으로 자바객체를 생성한다.


2.Servlet-context.xml

  • Servlet-context.xml은 DispatcherServlet에 의해 읽혀지는 설정파일이다.

  • Web Application Context에 등록할 Bean객체들을 기술하며, Controller객체애 대한 정보, 뷰리졸버, 핸들러매핑, 인터셉터나 AOP와 관련된 설정정보를 기술한다.

태그 살펴보기

<beans:beans xmlns="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context">
  • servlet-context는 mvc를 기본스키마로 가지고 있으며 그외 beans, context모듈이 기본적으로 추가되어있다.

<annotation-driven />
  • <mvc:annotation-drive/>에서 mvc접두어를 뺀 태그.

    • mvc와 관련된 어노테이션을 활성화시키는 역할을 한다. ex) @Controller, @Service 등

<resources mapping="/resources/**" location="/resources/" />
  • resources

    • 디스패쳐서블릿이 클라이언트의 요청 중 정적 자원들을 처리하기위한 처리경로와 저장위치를 설정하는 태그

    • 정적자원에 대한 요청은 /resources/**로 진행하며, 정적자원을 보관한폴더는 webapp아래의/resources/임을 의미함.

    • 클라이언트가 /spring/resources/image/test.jpg로 요청을한다면 프로젝트내의 /resources/폴더내부의 파일을 찾아서 클라이언트에게 이미지 파일을 체공한다.

    • 해당 설정을 통해 디스패쳐서블릿은 클라이언트가 요청하는 정적인 자원과, 동적인자원 (/)을 동시에 처리할 수 있다.

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".jsp" />
</beans:bean>
  • viewResolver

    • 디스패쳐 서블릿의 주소 자동완성도구이다.

    • ex) 순수 서블릿 request.getRequestDispatcher("/WEB-INF/views/common/error.jsp").forward(req,res) 스프링 return "common/error";

    • 리턴되는 문자열을 viewName이라고 부르며 viewName의 앞에는 /WEB-INF/views/, 뒤에는 .jsp를 자동으로 붙여준다.

    • Controller에서는 응답화면을 그려줄 jsp페이지를 선택할때 views폴더 내부의 폴더명/파일명 만 기술하면 자동으로 응답주소가 완성된다

<context:component-scan base-package="com.kh.spring" />
  • compont-scan

    • base-package와 base-pacakage하위의 모든 클래스를 scan하여 @Controller, @Service, @Repository 등의 어노테이션이 추가된 클래스를 디스패쳐서블릿이 사용할 bean객체로 등록하는 역할을 한다.

    • 등록된 bean객체는 Dispatcher Servlet의 IOC Contaniner인 Web Application Context에 등록된다

Last updated