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>
태그 살펴보기
<beans xmlns="http://www.springframework.org/schema/beans"> xml의 기본 스키마 설정. 현재 문서에서는 beans접두어를 붙이지 않아도 beans내부이 태그를 이용할 수 있게끔 해주는 속성이다.
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" XMLSchema-instance의 정보를 선언하는 부분
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> 선언된 스키마정보들의 Location을 정의하는 부분.
모듈 추가하기
다른 모듈을 추가로 설치해야한다면 xml문서의 Namespace로 넘어가 사용할 모듈을 선택하면 된다.

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

데이터베이스 연결하기
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