newlecture: spring MVC (3) : 서비스

조성우·2021년 7월 20일
0

Spring

목록 보기
3/4

maven > ojdbc8 추가를 한다.

java

private NoticeService noticeService;
    
public void setNoticeService(NoticeService noticeService) {
    this.noticeService = noticeService;
}

dispatcher-servlet.xml

<bean id="noticeService" class="com.newlecture.web.service.NoticeService" />
	 
<bean name="/notice/list" class="com.newlecture.web.controller.notice.ListController" >
	<property name="noticeService" ref="noticeService" />
</bean>

위와 같이 Controller 객체가 Service 객체를 set할 수 있게 한다.

xml 태그를 살펴보면 bean의 name태그는 요청이 오는 uri 이고
id 태그는 내부에서 참조하는 이름임을 알 수 있다.
ref태그는 대상이 참조형일때 사용한다
property name은 해당 대상을 set한다.

따라서 객체를 DI 받고자 하는 곳에 해당 대상을 담을 수 있는 setter가 있어야 한다.

위는 결합력이 강한 경우이다

결합력을 interface의 다형성을 이용해서 낮추도록 하자


위와 같이 package 구성후

public interface NoticeService {
   
   public List<Notice> getList(int page, String field, String query);
   int getCount() throws ClassNotFoundException, SQLException;
   int insert(Notice notice) throws ClassNotFoundException, SQLException;
   int update(Notice notice) throws ClassNotFoundException, SQLException;
   int delete(int id) throws ClassNotFoundException, SQLException;
   
}

인터페이스 선언

<bean id="noticeService" class="com.newlecture.web.service.jdbc.JDBCNoticeService" />

이 코드에서 service 객체를 넣었다 꼽았다 하면 된다 !

jdbc 설정 정보 분리하기

뉴렉썜과는 다르게 접근하곘다
https://mvnrepository.com/artifact/org.springframework/spring-jdbc/5.2.12.RELEASE

위에서 REALEASE 로 표기되었으면서, 사용을 많이한 버전을 가져오자
pom에 의존성 추가 후
java 파일 하나를 열어서 DirverManagerDataSource를 검색하자.
그러면 import 풀패키지명+클래스명이 나오는데.. 이것을 긁어서 xml에 추가

결과는 아래와 같다.

	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" ></property>
		<property name="url" value="jdbc:oracle:thin:@localhost:1521/xepdb1" ></property>
		<property name="username" value="philz" ></property>
		<property name="password" value="1234" ></property>
	</bean>

	<bean id="noticeService" class="com.newlecture.web.service.jdbc.JDBCNoticeService" >
		<property name="dataSource" ref="dataSource"></property>
	</bean>

xml 설정파일 쪼개기

dispatcher-servlet.xml 을 여러 xml 파일로 나눌 수 있다.

  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>
  		/WEB-INF/spring/service-context.xml
  		/WEB-INF/spring/security-context.xml
  	</param-value>
  </context-param>
  
  <servlet>
  	<servlet-name>dispatcher</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>/WEB-INF/spring/servlet-context.xml</param-value>
  	</init-param>
  </servlet>

contextConficLocation에는 하나의 xml밖에 오지 못한다.

이를 위해서 위에 설정 정보를 따로 두어 읽게 한다.

ContextLoaderListener 는 톰캣/세션이 시작/종료때 이벤트를 읽어가는 클래스이다

문제는 첫 요청시에 위 정보들이 load되므로 다소 느리단 것에 있다

  <servlet>
  	<servlet-name>dispatcher</servlet-name>
...
  	<load-on-startup>1</load-on-startup>
  	<async-supported>true</async-supported>
  </servlet>

이렇게 수정하면 이제 첫요청이 아니라 톰캣 구동시에 비동기 적으로 로딩된다

숫자 1은 서블릿이 여러개일때 우선순위 이다

profile
가장 아름다운 하나의 해답이 존재한다

0개의 댓글