KOTRA 강의를 기반으로 정리된 문서입니다.
** 볼드체는 강의에서 직접 다루는 기술입니다.
cf) Synchronous: 순서 보장, Asynchronous: 순서가 보장되지 않음
cf) Blocking: 요청을 보낸 이후 응답이 올 때까지 기다림
cf) Non-Blocking : 요청을 보낸 이후 기다리지 않고 원래 수행해야 하는 일을 진행하기
(1) DI
public class Hello {
String name;
Printer printer;
public Hello() { }
public void setName(String name){
this.name = name;
}
public void setPrinter(Printer printer) {
this.printer = printer;
}
<bean id = "hello" class = "myspring.di.xml.Hello">
<property name="name" vlaue ="Spring" />
<property name="printer" vlaue ="printer" />
</bean>
<bean id="printer"
class="myspring.di.xml.StringPrinter" .>
여기서 bean의 name="printer"는 public void setPrinter 메소드의 'setPrinter'를 지칭한다.
(2) Singleton
<!-- StringPrinter 클래스를 Spring Bean으로 지정 -->
<bean id="strPrinter" class="myspring.di.xml.StringPrinter" />
<!-- ConsolePrinter 클래스를 Spring Bean으로 지정 -->
<bean id="conPrinter" class="myspring.di.xml.ConsolePrinter" />
<!-- Hello 클래스를 Spring Bean으로 설정 -->
<bean id="hello" class="myspring.di.xml.Hello" scope="singleton">
<!-- setName("Spring") -->
<property name="name" value="Spring"/>
<!-- setPrinter(new StringPrinter()) -->
<property name="printer" ref="strPrinter"/>
</bean>
@Component("helloBean")
public class HelloBean {
@Value("어노테이션")
String name;
@Autowired
@Qualifier("stringPrinter")
PrinterBean printer;
List<String> names;
public HelloBean() {
System.out.println(this.getClass().getName() + "Constructor Called..");
}
public HelloBean(String name, PrinterBean printer) {
System.out.println(this.getClass().getName() + "Overloaded Constructor Called..");
this.name = name;
this.printer = printer;
}
public List<String> getNames() {
return this.names;
}
public void setNames(List<String> list) {
this.names = list;
}
public String sayHello() {
return "Hello " + name;
}
public void print() {
this.printer.print(sayHello());
}
}
<!-- Hello 클래스를 Spring Bean으로 설정 Constructor Injection-->
<bean id="helloCons" class="myspring.di.xml.Hello" scope="singleton">
<constructor-arg name="name" value="생성자Injection" />
<constructor-arg name="printer" ref="conPrinter" />
<property name="names">
<list>
<value>DI</value>
<value>AOP</value>
<value>MVC</value>
</list>
</property>
</bean>
<!-- Component Scanning -->
<context:component-scan base-package="myspring.di.annot" />
<!-- values.properties 파일 위치 설정 -->
<context:property-placeholder location="classpath:values.properties"/>
@Configuration
@ComponentScan(basePackages = {"myspring.di.annot"})
@PropertySource(value = "classpath:values.properties")
public class HelloBeanConfig {
@Bean("nameList")
public List getNames() {
return Arrays.asList("SpringFW", "SpringBoot");
}
}