겉바속촉

[spring] 생성자, setter 주입 각각 연습하기 본문

IT일기(하반기)/SPRING

[spring] 생성자, setter 주입 각각 연습하기

겉바속촉 2020. 6. 25. 15:44
728x90
반응형

목표는 다음과 같아요

지난번처럼 생성자랑 setter 활용해서 시작해볼게요

 

 

점수가 필요해보이네요

java, jsp, spring 변수가 필요하고 점수니까 int라고 해줄게요

 

 

Score.java

package spring.day0625.quiz;

public class Score {
	
	//멤버변수3개를 만든다(java, jsp, spring)
	int java, jsp, spring;
	

	//디폴트생성자
	public Score() {
		
	}
	
	//3과목을 모두 인자로 받는 생성자를 만들기 
	public Score(int java, int jsp, int spring){
		
		this.java=java;
		this.jsp=jsp;
		this.spring=spring;
		
	}

	//setter,getter 각각 받아오기
	public int getJava() {
		return java;
	}

	public void setJava(int java) {
		this.java = java;
	}

	public int getJsp() {
		return jsp;
	}

	public void setJsp(int jsp) {
		this.jsp = jsp;
	}

	public int getSpring() {
		return spring;
	}

	public void setSpring(int spring) {
		this.spring = spring;
	}
	
	

	
	
	

}

 


 

 

이제 이름과 나이가 들어가야하니까

Info 클래스를 하나 만들었습니다

그리고 얘는 접근이 힘들도록 private활용해서 string으로 선언할게요

 

 

Info.java

package spring.day0625.quiz;

public class Info {
	
	//멤버변수 이름, 나이로 만든다
	private String name;
	private String age;
	
	//디폴트생성자
	public Info() {
		
	}
	
	//이름, 나이를 인자로 받는 생성자 만든다
	Info(String name, String age){
		
	}
	
	//setter, getter
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	
	

}

 


위와 같이 클래스 두개 만들었으면

우리는 이제 출력문이 있는 클래스도 만들어야겠죠

이름은 MyData라고 지었습니다

 

 

첫번째 만들었던 score 클래스

두번째 만들었던 info 클래스를 가져와서 멤버 변수로 선언하는 것입니다.

그래서 이 값들을 주입할 생성자를 만들어주는 것이쥬

 

 

MyData.java

 

package spring.day0625.quiz;

public class MyData {
	
	//Score, Info 클래스를 멤버변수로 선언
	Score score;
	Info info;
	
	
	//Score, Info 를 각각 주입받는 생성자 만들기
	public MyData(Score score, Info info) {
		this.score=score;
		this.info=info;
		
	}
	

	//출력메서드(writeData로 만들기)
	//출력->이름,java,jsp,spring을 출력하는 메서드
	public void writeData()
	{
		System.out.println("***결과출력***");
		System.out.println("이름: "+info.getName());
		System.out.println("나이: "+info.getAge());
		System.out.println("java점수: "+score.getJava());
		System.out.println("jsp점수: "+score.getJsp());
		System.out.println("spring점수: "+score.getSpring());
		
	}
	
	

}

 

 

 

이제 xml에서 값을 넣어주면 거의 끄읕!!

 

appQuiz.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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">

	<!-- score1 강호동은 생성자 주입 -->
	<bean name="score1" class="spring.day0625.quiz.Score">
		<constructor-arg value="90"/>
		<constructor-arg value="88"/>
		<constructor-arg value="100"/>
	</bean>

	<!-- score2 유재석은 setter 주입 -->
	<bean name="score2" class="spring.day0625.quiz.Score">
		<property name="java" value="78"/>
		<property name="jsp" value="88"/>
		<property name="spring" value="55"/>
		
	</bean>
	
	<!-- info1 강호동은 생성자 주입 -->
	<bean name="info1" class="spring.day0625.quiz.Info">
		<constructor-arg value="강호동"/>
		<constructor-arg value="32"/>
			
	</bean>
	
	<!-- info2 유재석은 setter 주입 -->
	<bean name="info2" class="spring.day0625.quiz.Info">
		<property name="name" value="유재석"/>
		<property name="age" value="22"/>
				
	</bean>
	
	<!-- MyData1 -->
	<bean name="my1" class="spring.day0625.quiz.MyData">
		<constructor-arg ref="score1"/>
		<constructor-arg ref="info1"/>
	</bean>
	
	
	<!-- MyData2 -->
	<bean name="my2" class="spring.day0625.quiz.MyData">
		<constructor-arg ref="score2"/>
		<constructor-arg ref="info2"/>
	
	
	</bean>
	


</beans>

 


 

마지막으로 메인까지 작성해주면 되겠네요:)

 

MyDataMain.java

 

package spring.day0625.quiz;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyDataMain {

	public static void main(String[] args) {
		
		ApplicationContext appQuiz=
				new ClassPathXmlApplicationContext("spring/test2/appQuiz.xml");
		
		MyData my1=(MyData)appQuiz.getBean("my1");
		my1.writeData();
		
		MyData my2=appQuiz.getBean("my2",MyData.class);
		my2.writeData();
	}

}

 

여러가지를 만들기 때문에 너무 헷갈리고 어렵네요ㅜㅜ 다음과 같이 전체적인 틀을 이해해주고서 하나씩 다시 자세하게 살펴봐주세요!^^!

 

 

 

컴파일

 

 

 

 

 

 

예제 하나 더 연습

 

MyOracle.java

package spring.day0625.ex4;

public class MyOracle {
	
	private String driver;
	private String url;
	private String user;
	private String password;
	
	public MyOracle(String driver, String url) {
		this.driver=driver;
		this.url=url;		
	}

	public String getDriver() {
		return driver;
	}

	public void setDriver(String driver) {
		this.driver = driver;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public String getUser() {
		return user;
	}

	public void setUser(String user) {
		this.user = user;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
	
	//toString메소드
	//object로부터 상속받은 메소드라는 느낌
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "[MyOracle] \n driver: "+driver+"\n url: "+url
				+"\n user: "+user+"\n password: "+password;
		
	}
	
	
	
	

}

 

OracleContext.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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">

	<bean id="db" class="spring.day0625.ex4.MyOracle">
	<!-- 2개의 생성자 주입 -->
	<constructor-arg>
		<value>oracle.jdbc.driver.OracleDriver</value>
	</constructor-arg>
	
	
	<constructor-arg>
		<value>jdbc:oracle:thin:@localhost:1521:XE</value>
	</constructor-arg>
	
	<!-- 2개의 setter 주입 -->
	<property name="user" value="gutba"/>
	<property name="password" value="sokchock"/>
	
	</bean>

</beans>

 

OracleMain.java

package spring.day0625.ex4;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class OracleMain {
	
	public static void main(String[] args) {
		ApplicationContext app=
				new ClassPathXmlApplicationContext("oracledb/oracleContext.xml");
		
		MyOracle my=(MyOracle)app.getBean("db");
		//System.out.println(my.toString());
		System.out.println(my); //toString으로 만든 메서드는 my만 쳐도 출력된다.
	}

}

 

컴파일

 

 

728x90
반응형