root-context.xml에서 생성자에 값을 전달하여 Bean객체를 등록하는 방법
- 생성자가 오버로딩 되어 있는 경우
- root-context.xml에서 정수를 넣어 주어도 String이 우선 순위가 높기때문에 String을 받는 생성자가 호출이 된다.
- 정수를 받는 생성자를 호출하기 위해서는 type="int" 를 같이 작성해야 한다.
SampleBean5.java
public class SampleBean5 {
int num;
String str;
public SampleBean5() {
num = 0;
str = null;
}
public SampleBean5(int num) {
this.num = num;
str = null;
}
public SampleBean5(String str) {
this.num = 0;
this.str = str;
}
public SampleBean5(int num, String str) {
this.num = num;
this.str = str;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}
root-context.xml
<bean id="sampleBean5" class="com.app.beans.SampleBean5"></bean>
<bean id="sampleBean5_2" class="com.app.beans.SampleBean5">
<constructor-arg value="30" type="int"></constructor-arg>
</bean>
<bean id="sampleBean5_3" class="com.app.beans.SampleBean5">
<constructor-arg value="10" />
<constructor-arg value="20" />
</bean>
root-context.xml에서 setter를 통해 값을 주입하는 경우
- GetSetBean.java
- 필드변수 int var1; String var2; String var3;
- Getter, Setter 메소드가 있어야 함
<bean id="gsb1" class="com.app.beans.GetSetBean">
<property name="var1" value="500"></property>
<property name="var2" value="600"></property>
<property name="var3" value="문자"></property>
</bean>
<bean id="sb1" class="com.app.beans.SampleBean1" />
<bean id="sb2" class="com.app.beans.SampleBean1" />
<bean id="gsb2" class="com.app.beans.GetSetBean2">
<property name="var1" value="500"></property>
<property name="var2" value="600"></property>
<property name="var3" value="문자"></property>
<property name="sb1" ref="sb1"></property>
<property name="sb2" ref="sb2"></property>
</bean>
<bean id="gsb3" class="com.app.beans.GetSetBean2">
<property name="var1" value="500"></property>
<property name="var2" value="600"></property>
<property name="var3" value="문자"></property>
<property name="sb1">
<bean class="com.app.beans.SampleBean1" />
</property>
<property name="sb2" ref="sb2"></property>
</bean>
@어노테이션을 통해 빈으로 등록하는 방법
- @Configuration을 찾기 위해 servlet-context.xml에 다음을 추가한다.
<context:component-scan base-package="com.app.config"></context:component-scan>
- com.app.config 패키지에 Configuration 클래스 생성
- @Configuration 어노테이션을 클래스명 위에 작성한다.
@Configuration
public class BeanConfiguration {
@Bean
public JavaConfigBean javaConfigBean() {
return new JavaConfigBean();
}
@Bean
public JavaConfigBean javaConfig1() {
return new JavaConfigBean();
}
@Bean
public JavaBean1 javaTempBean1() {
return new JavaBean1();
}
@Bean
public JavaBean1 javaBean1Lunch() {
return new JavaBean1();
}
}
- com.app.beans 패키지에 Bean클래스 작성
public class JavaConfigBean {
public JavaConfigBean() {
System.out.println("JavaConfigBean 생성자 호출");
}
}
- Controller 클래스 작성
@Controller
public class JavaBeanController {
@Autowired
ApplicationContext applicationContext;
@GetMapping("/javaBean")
public String javaBean() {
JavaConfigBean jb1 = (JavaConfigBean)applicationContext.getBean("javaConfigBean");
JavaConfigBean jb2 = (JavaConfigBean)applicationContext.getBean("javaConfig1");
System.out.println(jb1);
System.out.println(jb2);
return "checkBean";
}
@GetMapping("/javaBean1")
public String javaBean1() {
JavaBean1 jb1 = (JavaBean1)applicationContext.getBean("javaTempBean1");
JavaBean1 jb2 = (JavaBean1)applicationContext.getBean("javaBean1Lunch");
System.out.println(jb1);
System.out.println(jb2);
return "checkBean";
}
}
@Autowired 어노테이션을 사용해서 Bean을 쉽게 등록하고 사용하는 방법
@Autowired
NewBean newBean;
@GetMapping("/newBean")
public String checkNewBean() {
System.out.println(newBean);
return "checkBean";
}
DI, IOC 관련 추가 내용