Verity's Daily Logs_

[Spring-Framework]Java Configuration 전환하기 본문

Spring Framework

[Spring-Framework]Java Configuration 전환하기

johye0 2020. 8. 24. 08:32
반응형

[참고도서: https://book.naver.com/bookdb/book_detail.nhn?bid=13993776]

 

스프링 3버전 이후에는 Java 클래스 파일을 이용하는 설정을 지원하는데, 지속적으로 XML 과 별개로 Java를 이용하는 설정 (Java Configuration)을 활용한 프로젝트 예시가 증가하고 있다.

 

이전 게시글과 동일하게 'Spring Legacy Project' 로 생성한 프로젝트가 있다는 가정하에 아래 단계를 거치면 된다.

 

1. XML 파일 삭제

web.xml, servlet-context.xml, root-context.xml 파일을 삭제한다.

web.xml을 삭제하면 pom.xml에서 에러가 발생하는데, 이를 해결하기 위해서 plugins내에 설정을 추가한다.

- pom.xml

	<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
	</plugin>

 

2. @Configuration 설정파일 생성하기

@Configuration이라는 어노테이션을 이용해서 해당 클래스의 인스턴스를 이용해서 설정파일을 대신할 수 있다.

도메인 패키지 하위경로에 config 패키지를 생성, RootConfig 클래스와 WebConfig, ServletConfig 클래스를 작성한다.

 

- RootConfig.java

package com.happynarae.itapp.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages= {"com.[패키지경로]"})
public class RootConfig {

}

 

- WebConfig.java

package com.happynarae.itapp.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer {

	@Override
	protected Class<?>[] getRootConfigClasses() { 
		//root-context.xml 을 대신하는 클래스를 지정함: RootConfig.java
		return new Class[] {RootConfig.class};
	}

	@Override
	protected Class<?>[] getServletConfigClasses() {
		return new Class[] {ServletConfig.class};
	}

	@Override
	protected String[] getServletMappings() {
		return new String[]{"/"};
	}
}

 

- ServeletConfig.java

package com.happynarae.itapp.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

@EnableWebMvc
@ComponentScan(basePackages = {"com.[패키지경로].controller"})
public class ServletConfig implements WebMvcConfigurer {
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry)  {
        InternalResourceViewResolver bean = new InternalResourceViewResolver();
        bean.setViewClass(JstlView.class);
        bean.setPrefix("/WEB-INF/views/");
        bean.setSuffix(".jsp");
        registry.viewResolver(bean);
    }
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry){
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    }
}

반응형
Comments