SpringMVC 환경 세팅

Spring setting

spring legacy project -> Spring MVC project ->com.tis.mvc 생성 -> pom.xml

<java-version> 1.6 -> 1.8 변경 -> <org.springframework-version>5.0.7변경
<org.aspectj-version> 1.9.0으로 변경
Dependencies 탭 누르고 maven에 add -> Group id= javax.servlet  ,Artifact id=javax.servlet-api
version= 3.1.0 완료
Test version 4.12 로 변경
Test 밑에 주석 ADD My Module
Dependencies add누르고 -> org.projectlombok, lombok, 1.18.0 생성
add -> org.springframework, spring-test, ${org.springframework-version} 생성
add -> com.oracle, ojdbc6, 11.2.0.3  scope : system 생성 후
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/ojdbc6.jar</systemPath> 추가
src->main->webapp->WEB-INF->lib폴더 생성 후 ojdbc6.jar 복붙
<!-- DBCP Module -->주석만들기
add->org.apache.commons, commons-dbcp2, 2.1.1
<!-- MyBatis Module -->주석만들기
add->org.mybatis, mybatis, 3.4.6 생성
add->org.mybatis, mybatis-spring, 1.3.2 생성
add->org.springframework, spring-ibatis, 2.0.8 생성
<!-- Spring JDBC Module -->주석만들기
add->org.springframework, spring-jdbc, ${org.springframework-version} 생성
add->org.springframework, spring-tx, ${org.springframework-version} 생성
<!-- HikariCP --> 주석만들기 (커넥션풀)
add->com.zaxxer, HikariCP, 2.7.4 생성
C:\Users\user\.m2\repository 들어가면 등록한 라이브러리 파일 있음
<groupId>org.apache.maven.plugins</groupId>

build에
source, target =>1.8로 변경

SpringMVC 우클릭 후 Maven -> update project


----------------파일로 복붙하기 가능-----------------------
우측상단에 검색 옆에꺼 누르고 Java EE Open
server new 아파치 톰캣 8.5 -> directory Browse 클릭 후 톰캣 8.5폴더로 설정 ->
Installed JREs... 클릭 후 Edit 눌러서 Jre파일을 JdK파일로 변경 후 apply and close ->
jre를 다시 눌러서 workspace jre1.8.0변경 후 피니시
서버 우클릭 add and Remove 들어가서 SpringMVC 우측으로 보내고 피니시
더블클릭 후 Tomcat admin port - -> 9091 변경 후 저장하고
서버 실행 후 SpringMVC run as 눌렀을 때 Hello World! 뜨면 성공
--------------------------------------------------------------------------------

src -> main -> webapp -> web.xml
거기서 Processes application requests 주석 안 param값을

<param-value>/WEB-INF/spring/appServlet/servlet-context.xml,
         /WEB-INF/spring/appServlet/memo-context.xml
</param-value>

으로 변경

Bean properties파일 사용

<context:property-placeholder location="classpath:ex11/admin.properties"/>를 명시해준다.
AdminInfo.java

package ex11;

public class AdminInfo {
	private String adminId;
	private String adminPwd;
	
	
	public String getAdminId() {
		return adminId;
	}
	public void setAdminId(String adminId) {
		this.adminId = adminId;
	}
	public String getAdminPwd() {
		return adminPwd;
	}
	public void setAdminPwd(String adminPwd) {
		this.adminPwd = adminPwd;
	}

}


admin.properties

admin=sys
adminPwd=Abcd1234

application.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:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
	
	
	<!-- context 네임스페이스를 추가한 뒤, context:property-placeholder를 통해
		admin.properties 파일이 위치한 경로를 잡아주자. -->
		<context:property-placeholder location="classpath:ex11/admin.properties"/> 
		<!-- 다른 스키마와 충돌을 막기위해서 context를 추가한다. 
		다른파일에 admin.properties가 없다면 context를 빼고 property-placeholder만 적으면 된다 -->
		
		<!-- [1] AdminInfo빈을 생성하고, 아이디와 비번을 setter injection으로 주입하세요. scott, tiger -->
		<bean id="admin1" class="ex11.AdminInfo">
			<property name="adminId" value="scott"/>
			<property name="adminPwd" value="tiger"/>
		</bean>
		
		<!-- [2] admin.properties파일에 설정된 아이디와 비번을 갖는 AdminInfo빈 생성하기 -->
		<bean id="admin2" class="ex11.AdminInfo">
			<property name="adminId" value="${admin}"/>
			<property name="adminPwd" value="${adminPwd}"></property>
		</bean>
		<!-- context:property의 설정된 key값으로 el표현식 -->

</beans>

 

config 생성에서 주입

package ex12;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

@Configuration
public class AppConfig {
	
	@Value("${admin}")
	private String adminId; //sys주입
	
	@Value("${adminPwd}") //ex12/admin.properties 파일에 key값을 찾아서 넣는다.
	private String adminPwd;
	
	@Value("scott")
	private String subAdminId;//scott주입
	
	@Value("tiger")
	private String subAdminPwd;
	
	//외부파일(admin.properties)의 데이터 얻어오기 위한 빈을 생성
	@Bean
	public static PropertySourcesPlaceholderConfigurer properties() {
		PropertySourcesPlaceholderConfigurer config = new PropertySourcesPlaceholderConfigurer(); //기본생성자 생성
		//PropertySourcesPlaceholderConfigurer객체에 admin.properties파일이 위치한 경로를 주입한다.
		Resource res= new ClassPathResource("ex12/admin.properties"); //파일위치 참조하는 것
		config.setLocation(res); //리소스 객체 넣기
		
		return config;
	}
	
	@Bean
	@Scope("prototype") //객체가 호출될 때마다 새로 생성됨
	public AdminInfo admin1() {
		AdminInfo a=new AdminInfo();
		a.setAdminId(adminId);
		a.setAdminPwd(adminPwd);
		return a;
	}
	
	@Bean
	public AdminInfo admin2() {
		//AdminInfo a=new AdminInfo();
		AdminInfo a= admin1(); 
		a.setAdminId(subAdminId);
		a.setAdminPwd(subAdminPwd);
		return a;
	}
	
}

annotation

package ex13;

import javax.inject.Inject;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

//어노테이션을 통해 주입하는 방법
//[1] @Value ==> 기본자료형이나 문자열 값을 주입할 때 사용하는 어노테이션
//[2] @Autowired ==> 참조형을 주입할 때 사용 (by type으로 주입)
//[3] @Resource ==> 참조형을 주입할 때 사용 (by name으로 주입)
//[4] @Inject ==> 참조형을 주입할 때 사용 [단, pom.xml에 Inject라이브러리를 등록해야 사용 가능]
public class ServiceImpl implements Service {
	
	@Autowired
	@Qualifier("emp2")
	private Emp emp;
	/**Emp라는 클래스 유형의 빈이 있을 경우 주입해준다.
	 * 이 때 같은 타입이 여러 개 있을 경우 예외가 발생한다.
	 * 이럴 때는 이름 식별하기 위해 @Qualifier("빈이름")을 함께 사용하여
	 * 어떤 빈인지 이름을 명시해주면 해결 가능하다.
	 * */
	
	//@Resource(name="member")
	@Inject
	private Member user;
	/*@Resource : 리소스 이름이 member인 객체를 주입해준다. 즉 빈의 이름으로 주입한다.
	 * 주로 xml에 설정된 빈을 주입할 때 많이 사용한다. */
	
	/*@Inject : 자바에서 지원하는 어노테이션 by type으로 주입한 뒤, 만약 타입으로 연결되지 않으면 name으로 연결한다.
	 * pom.xml에 아래와 같이 라이브러리 등록해야 사용가능하다.
	 * <dependency>
			<groupId>javax.inject</groupId>
			<artifactId>javax.inject</artifactId>
			<version>1</version>
		</dependency>*/
	
	@Override
	public void test1() {
		System.out.println(emp);
	}
	
	@Override
	public void test2() {
		System.out.println(user);
	}

}

 

+ Recent posts