728x90
자동주입
@Autowired @Qualifier
package main;
import beans.Test;
import config.BeanClass;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MainClass {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx =
new AnnotationConfigApplicationContext(BeanClass.class);
Test t = ctx.getBean("test1", Test.class);
System.out.println(t.getD3());
System.out.println(t.getD4());
System.out.println(t.getD5());
}
}
package config;
import beans.Data;
import beans.Data2;
import beans.Test;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
//현재 자바 파일이 빈 등록을 하기위한 (객체등록) 자바파일임을 알리는 어노테이션
public class BeanClass {
@Bean
public Test test1() {
return new Test();
}
@Bean
public Data data1() {
return new Data();
}
/////////////////// qualifier이름 설정한거랑 똑같은 이름으로 멧도드를 설정해야 자동주입됨
@Bean
public Data2 obj1() {
return new Data2();
}
@Bean
public Data2 obj2() {
return new Data2();
}
}
package beans;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
public class Test {
private int d1;
private Data d2;
@Autowired // 자동주입 (타입을 통해 bean 객체를 자동으로 주입)
private Data d3;
@Autowired
@Qualifier("obj1") //autowire로 주입할 때 같은 타입 bean이 여러개 정의되어있다면 이름을 설정(qualifier)해 주입한다.
private Data2 d4;
@Autowired
@Qualifier("obj2")
private Data2 d5;
public int getD1() {
return d1;
}
public void setD1(int d1) {
this.d1 = d1;
}
public Data getD2() {
return d2;
}
public void setD2(Data d2) {
this.d2 = d2;
}
public Data getD3() {
return d3;
}
public void setD3(Data d3) {
this.d3 = d3;
}
public Data2 getD4() {
return d4;
}
public void setD4(Data2 d4) {
this.d4 = d4;
}
public Data2 getD5() {
return d5;
}
public void setD5(Data2 d5) {
this.d5 = d5;
}
}
@Component
package main;
import beans.Test;
import beans.Test2;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainClass {
public static void main(String[] args) {
ClassPathXmlApplicationContext ctx =
new ClassPathXmlApplicationContext("config/beans.xml");
Test2 t2 = ctx.getBean("test2",Test2.class);
System.out.println(t2);
Test2 t22 = ctx.getBean("test22",Test2.class);
System.out.println(t22);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 저장된 패키지 안에 있는 Bean클래스들의 어노테이션을 분석 -->
<context:component-scan base-package="beans2"/>
<context:component-scan base-package="beans3"/>
<bean class="beans.Test"/>
<bean class="beans.Test2" id="test2"/>
<bean class="beans.Test2" id="test22"/>
</beans>
package beans;
public class Test2 {
}
@Component를 입력해놓은 경우
<context:component-scan base-package="beans2"/>
를 xml에 입력해줘야 스캔이 가능
package main;
import beans.Test;
import beans.Test2;
import beans2.Test3;
import beans2.Test4;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainClass {
public static void main(String[] args) {
ClassPathXmlApplicationContext ctx =
new ClassPathXmlApplicationContext("config/beans.xml");
Test3 t3 = ctx.getBean(Test3.class);
System.out.println(t3);
Test4 t4 = ctx.getBean("component4", Test4.class); // 이름을 설정한 경우 id값이 된다.
System.out.println(t4);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 저장된 패키지 안에 있는 Bean클래스들의 어노테이션을 분석 -->
<context:component-scan base-package="beans2"/>
<context:component-scan base-package="beans3"/>
<bean class="beans.Test"/>
<bean class="beans.Test2" id="test2"/>
<bean class="beans.Test2" id="test22"/>
</beans>
package beans2;
import org.springframework.stereotype.Component;
@Component
//bean을 따로 등록하지 않아도 자동으로 등록
public class Test3 {
}
package beans2;
import org.springframework.stereotype.Component;
@Component("component4")
public class Test4 {
}
Test4 t4 = ctx.getBean("test4", Test4.class); // 이름을 설정한 경우 id값이 된다.
System.out.println(t4);
<bean class="beans2.Test4" id="test4"/>
아이디값을 따로 지정해서 하는 것도 가능하다
Test5 t5 = ctx.getBean("test5", Test5.class);
System.out.println(t5);
<context:component-scan base-package="beans3"/>
package beans3;
import org.springframework.stereotype.Component;
@Component
public class Test5 {
}
728x90
'Frameworks > Spring' 카테고리의 다른 글
[Spring] MVC (Form요소,태그 / forward/redirect / Request 빈 주입) (2) | 2024.05.08 |
---|---|
[Spring] MVC (추출/ 주입받기 (Mapping / viewResolver)) (2) | 2024.05.08 |
[Spring] 설정 클래스를 활용한 Bean 수동 구성 (0) | 2024.05.02 |
[Spring] setDI / AutoDI / CollectionDI (0) | 2024.05.02 |
[Spring] 스프링 프레임워크 개념 (0) | 2024.05.01 |