package com.study.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.study.springboot.multi.Config;
import com.study.springboot.multi.Person;
import com.study.springboot.multi.Printer;
// @SpringBootApplication
public class Ex01JavaDiApplication {
public static void main(String[] args) {
// SpringApplication.run(Ex01JavaDiApplication.class, args);
ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
Person Person1 = (Person)context.getBean("Person1");
Person1.print();
Person Person2 = context.getBean("hello", Person.class);
Person2.print();
Printer printer = context.getBean("printerB", Printer.class);
Person1.setPrinter(printer);
Person1.print();
if(Person1 == Person2) {
System.out.println("같은 객체");
} else {
System.out.println("다른 객체");
}
}
}
package com.study.springboot.multi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class Config {
// @Bean : 메소드에 어노테이션을 붙이면 return되는 객체를 bean으로 등록
@Bean
public Person Person1() {
// setter()메소드를 이용한 의존성 주입
Person Person1 = new Person();
Person1.setName("홍길동");
Person1.setNickname("아버지라부르지못함");
Person1.setPrinter(new PrinterA());
return Person1;
}
@Bean(name="hello") //return의 객체 이름이 없는 경우 @Bean옆에 이름을 명시
public Person Person2() {
// constructor 를 이용한 의존성 주입
return new Person("이순신","장군", new PrinterA());
}
@Bean
public PrinterA printerA() {
return new PrinterA();
}
@Bean
public PrinterB printerB() {
return new PrinterB();
}
}
package com.study.springboot.multi;
public class Person {
private String name;
private String nickname;
private Printer printer;
public Person() {
}
public Person(String name, String nickname, Printer printer) {
super();
this.name = name;
this.nickname = nickname;
this.printer = printer;
}
public void setName(String name) {
this.name = name;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public void setPrinter(Printer printer) {
this.printer = printer;
}
public void print() {
printer.print("Hello " + name + " : " + nickname);
}
}
package com.study.springboot.multi;
public interface Printer {
public void print(String msg);
}
package com.study.springboot.multi;
public class PrinterA implements Printer {
@Override
public void print(String msg) {
System.out.println("PrinterA : " + msg);
}
}
package com.study.springboot.multi;
public class PrinterB implements Printer {
@Override
public void print(String msg) {
System.out.println("PrinterB : " + msg);
}
}