[실습] 내용을 파일로 출력
Project : Chapter02_XML
Package : sample05
Interface : MessageBean.java
Class : MessageBeanImpl.java
HelloSpring.java - public static void main(String[] args)
Interface : Outputter.java
Class : FileOutputter.java - 파일로 출력
Interface : MessageBean.java
package sample05;
public interface MessageBean {
public void helloCall();
}
Interface : Outputter.java
package sample05;
public interface Outputter {
public void output(String message);
}
MessageBeanImpl.java
name - 생성자로 생성
phone, ourputter - setter로 생성
package sample05;
public class MessageBeanImpl implements MessageBean {
private String name;
private String phone;
private Outputter outputter;
public MessageBeanImpl(String name) {
this.name = name;
System.out.println("MessageBeanImpl(String name)");
}
public void setPhone(String phone) {
this.phone = phone;
System.out.println("setPhone(String phone)");
}
public void setOutputter(Outputter outputter) {
this.outputter = outputter;
System.out.println("setOutputter(Outputter outputter)");
}
@Override
public void helloCall() {
System.out.println("helloCall()");
}
}
FileOutputter.java - 결과를 파일로 출력
package sample05;
//결과를 파일로 출력
public class FileOutputter implements Outputter {
private String filePath;
private String fileName;
public void setFilePath(String filePath) {
this.filePath = filePath;
System.out.println("setFilePath(String filePath)");
}
public void setFileName(String fileName) {
this.fileName = fileName;
System.out.println("setFileName(String fileName)");
}
@Override
public void output(String message) {
System.out.println("output(String message)");
}
}
MessageBeanImpl을 생성한 다음에 FileOutputter을 생성해도되고
FileOutputter부터 처리하겠다 순서는 상관없다.
applicationContext.xml
<!-- sample05 -->
<bean id="fileOutputter" class="sample05.FileOutputter">
<property name="filePath" value="D:/Spring/"></property>
<property name="fileName" value="result.txt"></property>
</bean>
<bean id="messageBeanImpl2" class="sample05.MessageBeanImpl">
<constructor-arg value="홍길동"></constructor-arg>
<property name="phone" value="010-1234-5678"></property>
<property name="outputter" ref="fileOutputter"></property>
</bean>
MessageBeanImpl.java
@Override
public void helloCall() {
System.out.println("helloCall()");
outputter.output("나의 이름은 " + name + " 이고, 핸드폰은 " + phone + "이다");
}
FileOutputter.java
@Override
public void output(String message) {
System.out.println("output(String message)");
try {
FileWriter fileWriter = new FileWriter(filePath + fileName);//파일 객체 생성
fileWriter.write(message); //파일 출력
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
HelloSpring.java
package sample05;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloSpring {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
MessageBean messageBean = (MessageBean) context.getBean("messageBeanImpl2");
messageBean.helloCall();
}
}
applicationContext.xml -- 순서를 바꿔보면
<!-- sample05 -->
<bean id="messageBeanImpl2" class="sample05.MessageBeanImpl">
<constructor-arg value="홍길동"></constructor-arg>
<property name="phone" value="010-1234-5678"></property>
<property name="outputter" ref="fileOutputter"></property>
</bean>
<bean id="fileOutputter" class="sample05.FileOutputter">
<property name="filePath" value="D:/Spring/"></property>
<property name="fileName" value="result.txt"></property>
</bean>
처음에 messageBeanImpl2를 먼저 메모리에 잡게되면 생성자는 자동호출이 돼서 같이 딸려온다고 생각하면 된다.
그리고 나머지 변수 메모리를 잡기위해 확인을 하는데 outputter fileOutputter라는 객체가 포함되어 있는 것을 확인을 하게 된다. 객체가 있으면 먼저 객체를 잡으러 가기때문에 fileOutputter에 있는 setter가 잡히게 되고 그 다음에
다시 messageBeanImpl2 돌아가서 나머지 객체들이 잡히는 것이다.
'Spring' 카테고리의 다른 글
DAY 63 - 스프링 프레임워크 - JDBC / HOMEWORK (2024.10.04) (2024.10.07) (1) | 2024.10.04 |
---|---|
DAY 63 - 스프링 프레임워크 - AOP (2024.10.04) (0) | 2024.10.04 |
DAY 61 - 스프링 프레임워크 HOMEWORK (2024.10.01) (2024.10.02) (0) | 2024.10.02 |
DAY 61 - 스프링 프레임워크 (2024.10.01) (1) | 2024.10.01 |
DAY 60 - 스프링 프레임 워크 HOMEWORK (2024.09.30) (2) | 2024.09.30 |