개발새발 블로그

'STS'에 해당되는 글 1건

  1. [SpringBoot/STS] Java Di Application

[SpringBoot/STS] Java Di Application

컴퓨터/Spring Boot
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);
	}
}