아무튼 개발
article thumbnail
반응형

 

의존성을 주입하는 방법 중에서도

오늘은 어노테이션을 사용하지 않고 수동으로

생성자로 의존성을 주입하는 방법

메소드로 의존성을 주입하는 방법을 알아보겠다.

 


미리 메소드를 만들어서 각각의 방법이 어떻게 달라지는지 확인하려고 한다.

 

먼저 생성자 메소드 예제의 파일이다.

 

MessageService
public interface MessageService {

	public String getMessage();	
}

 

인터페이스에 메소드를 만들어놓았다.

 

MyMessageService
public class MyMessageService implements MessageService{

	public String getMessage() {		
		return "생성자 메소드 방법";
	}
}

 

위의 인터페이스를 상속해주었기에 오버라이딩해서

return 값을 추가로 설정해주었다.

 

 

밑의 파일은 메소드 의존성을 위한 파일이다.

JobService
public interface JobService {
	
	public void getJob();
}

마찬가지로 인터페이스에 메소드를 만들었다.

 

MyJobService
public class MyJobService implements JobService{

	public void getJob() {
		System.out.println("메소드 의존성 방법");
	}
}

 

getMessage()에서는 return값만 줬지만

이번에는 메소드 안에 출력 값을 주었다.

 

 

수동으로 의존성을 주입할 것이기 때문에

위에서 만든 파일들과 객체를 생성할 xml파일을 연결시킬 중간 역할의 파일을 만들었다.

ServiceConsumer
public class ServiceConsumer {
	
	MessageService ms;
	JobService js;
	
	public ServiceConsumer(MessageService ms) {
		this.ms = ms;
	}	

	public void setJobService(JobService js) {
		this.js = js;
	}

	public void cunsumerService() {		

	String message = ms.getMessage();	
	System.out.println(message);	
		
	js.getJob();	
	}	
}

 

먼저 사용할 인터페이스들을 불러왔다.

 

생성자 의존성 주입의 경우, 매개변수에 값이 들어와서 생성자 메소드로 값을 넣어준다.

메소드 경우에도 마찬가지로 먼저 생성자 메소드를 만들어준다. 

밑의 xml 파일에서 구체적인 경로는 확인할 수 있다.

 

cunsumerService 메소드에서는 출력을 위한 코딩을 만들어 준다.

변수를 만들어 인터페이스의 메소드를 호출하여 담을 수 있으며

getJob은 메소드 내에 출력 기능을 넣었으므로 바로 호출한다.

 

 

app-context.xml

xml 파일에서 2가지의 방식이 나뉜다.

<beans>
	
	<bean id="serviceConsumer" class="com.exe.springdi4.ServiceConsumer">
		<constructor-arg ref="messageService"/>
        <property name="jobService" ref="jobService"/>
	</bean>
	
	<bean id="messageService" class="com.exe.springdi4.MyMessageService"/>
	<bean id="jobService" class="com.exe.springdi4.MyJobService"/>

</beans>

 

serviceConsumer 파일을 사용해야 하므로 객체 생성을 해준다.

 

 그 안에

생성자의 경우, <constructor-arg ref="messageService"/>로 의존성을 주입한다.

ref에는 매개변수에 들어갈 객체 messageService의 id를 가져온다. 이는 제어의 역전이기도 하다.

 

메소드의 경우, <property name="jobService" ref="jobService"/>로 의존성을 주입한다.

프로퍼티 네임은 set뒤에 있던 메소드명이고, ref에는 객체 생성한 id를 가져온다.

 

 

Main

실행할 메인 파일이다.

public class DiMain {

	public static void main(String[] args) {		
		
		GenericXmlApplicationContext context = new GenericXmlApplicationContext("app-context.xml");
		
		ServiceConsumer sc = (ServiceConsumer)context.getBean("serviceConsumer");
		sc.cunsumerService();
	}
}

 

xml이 실행되야 하므로, GenericXmlApplicationContext를 통해 xml 파일명을 입력해 읽어들인다.

cunsumerService메소드를 호출할 수 있도록 그 안에서 객체의 id를 가져와

호출해내면, 콘솔창에 각각의 값에 대해 출력이 된다.

 

 

 

 

3월 24일 목요일 🌖

오늘부터 이클립스가 아닌 STS(Spring Tool Suite)을 사용한다.

내용은 비슷하지만 새로운 마음가짐(?)이 들기도 하였다.

파이널 프로젝트도, 종강도 얼마 안남았으니

남은 시간 더 완벽하게 마무리 할 수 있도록 열심히 달려보자 !!

 

반응형
profile

아무튼 개발

@릴쥬

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...