WonYong-Jang / ToyProject

0 stars 0 forks source link

Setting / java config #3

Open WonYong-Jang opened 5 years ago

WonYong-Jang commented 5 years ago

gradle

2 과 같이 gradle 설정

log4j

log4j.properties
log4j.rootLogger=INFO, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= %-5p %c{1}:%L - %m%n

파일 구조

src/main/java : 실제로 작성되는 스프링 코드의 경로 src/main/resources : 실행할 때 참고하는 기본 경로 (설정 파일) src/test/java : test용 코드 webapp/WEB-INF/spring/appServlet/servlet-context.xml : 웹 과 관련된 스프링 설정 파일

servlet-conext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <mvc:annotation-driven />
    <context:component-scan base-package="com.mycompany.controller" />
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/root-context.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

프로젝트 구동은 web.xml 에서 시작하여 root-context 경로가 설정되어 있음!

스크린샷 2019-10-20 오후 10 03 36

root-context.xml

스크린샷 2019-11-24 오후 9 21 38

1) 스프링이 시작되면 먼저 스프링이 사용하는 메모리 영역을 만들게 되는데 이를 컨텍스트라 함 (스프링에서는 ApplicationContext라는 이름의 객체가 만들어짐) 2) 스프링은 자신이 객체를 생성하고 관리해야 하는 객체들에 대한 설정이 필요(root-context.xml) 3) root-context.xml 에 설정된 을 통해 org.zerock.sample 패키지를 스캔 4) @Component 라는 어노테이션이 존재하는 클래스의 인스턴스를 생성 5) Restaurant 객체는 Chef 객체가 필요하다는 @Autuwired 설정이 있으므로, 스프링은 Chef 객체에 주입

참고 : http://blog.naver.com/PostView.nhn?blogId=1ilsang&logNo=221385911861&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView

WonYong-Jang commented 5 years ago

Java Configuration

1) 기존 root-context.xml , servlet-context.xml, web.xml 을 삭제

2) 아래와 같이 config 패키지에 해당 파일 생성

스크린샷 2019-10-23 오후 9 29 21

3) RootConfig 는 root-conext.xml 같음 @ComponentScan을 통해 설정 파일이라는 것을 알려줌 / xml 에서 컴포넌트 스캔 부분은 어노테이션으로 대체 @ComponentScan 을 통해 해당 패키지의 @Component 들을 Bean 객체로 등록 가능

@Configuration
@ComponentScan(basePackages = {"org.zerock.sample"})
public class RootConfig {
}

4) WebConfig

public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer{

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] {RootConfig.class};
    }
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] {ServletConfig.class};   
    }
    @Override
    protected String[] getServletMappings() {
        return new String[] {"/"};
    }
}

5) ServletConfig

@EnableWebMvc
@ComponentScan(basePackages = {"org.zerock.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/");
    }
}