스프링 설정 클래스를 선언하는 어노테이션
bean을 정의하는 어노테이션
-> AnnotationConfigApplicationContext는 자동으로 실행해 결과로 리턴하는 객체들을 싱글턴으로 관리해줌
@Controller, @Service, @Repository, @Component 어노테이션이 붙은 클래스를 찾아 컨테이너에 등록
컴포넌트 스캔의 대상이 되는 애노테이션 중 하나로써 주로 유틸, 기타 지원 클래스에 붙이는 어노테이션
주입 대상이되는 bean을 컨테이너에 찾아 주입하는 어노테이션
package kr.or.connect.diexam01;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ApplicationConfig {
@Bean
public Car c(Engine e) {
// 파라미터를 받아들이지 않는 객체 생성
Car c= new Car();
c.setEngine(e);
return c;
}
@Bean
public Engine engine() {
return new Engine();
}
}
package kr.or.connect.diexam01;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ApplicationContextExam03 {
public static void main(String[] args) {
// ApplicationConfigs에서 설정해준 Bean들을 만들어 가지고 있다가 사용자의 요청에 의해 결과 반환
ApplicationContext ac = new AnnotationConfigApplicationContext(ApplicationConfig.class);
// Bean을 객체의 이름에 따라 요청하는 과정
//Car car=(Car) ac.getBean("car");
// Bean을 객체의 타입에 따라 요청하는 과정 -> 객체의 이름에 상관없이 가져올 수 있다
Car car = (Car) ac.getBean(Car.class);
car.run();
}
}
package kr.or.connect.diexam01;
import org.springframework.stereotype.Component;
//컴포넌트 어노테이션 추가
@Component
public class Engine {
public Engine() {
System.out.println("Engine 생성자");
}
public void exec() {
System.out.println("엔진이 동작합니다.");
}
}
package kr.or.connect.diexam01;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class Car {
@Autowired
private Engine v8;
public Car() {
System.out.println("Car 생성자");
}
public void setEngine(Engine e) {
this.v8=e;
}
public void run() {
System.out.println("엔진을 이용하여 달립니다.");
v8.exec();
}
}
package kr.or.connect.diexam01;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
//어노테이션 붙은 클래스를 자동으로 등록할 수 있도록 함
//반드시 정확한 패키지명을 입력해줘야 패키지 내의 컴포넌트를 스캔함
//컨트롤러, 서비스, 레포지토리, 컴포넌트 등의 어노테이션이 붙어있는 클래스들을 Bean으로 등록해줌
@ComponentScan("kr.or.connect.diexam01")
public class ApplicationConfig2 {
}
package kr.or.connect.diexam01;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class ApplicationContextExam04 {
public static void main(String[] args) {
ApplicationContext ac = new AnnotationConfigApplicationContext(ApplicationConfig.class);
Car car = (Car)ac.getBean(Car.class);
car.run();
}
}