DI(Defendency Inject)
public class Car {
//결합도가 강하다(높다)
private Engine engine = new Enging();
//결합도가 강하다(높다)
public Car(){
this.engine = new Enging();
}
//결합도가 약하다(낮다)
public Car(Enging engine){
this.engine = engine;
}
//결합도가 약하다(낮다)
public void setEngine(Engine enginge){
this.engine = engine;
}
}
public class Engine{
}
-------------------------------------
Car car = new Car();
Engine engine = new Engine();
car.setEngine(engine);
IOC
Inversion of Controll(제어의 역전)
개발자가 아닌 Spring Container로 제어를 맡김
객체 생성
1. Annotation
@Controller("빈의 이름") : 객체 생성, Constroller 역할
@Service("빈의 이름") : 객체 생성, Service 역할
@Repository("빈의 이름") : 객체 생성, DAO 역할
@Mapper :
@Component("빈의 이름") : 객체 생성, 그외 클래스
서버가 처음 실행시 베이스패키지및 하위 패키지 까지 annotaion을 스캔해서 작동
생성된 객체를 객체 pool에 저장 하고 있다가 필요 할때 꺼내 씀
생성된 객체는 Singletone
객체 주입
1. Annotation
@Autowired
@Qualifier("빈의 이름")
public class Car{
@Autowired
private Engine engine;
public Car(@Autowired Engine engine){}
@Autowired
public void setEngine(@Autowired Engine engine){}
}
객체 pool에서 선언된 데이터타입과 일치하는 타입을 꺼내서 주입
1. 일치하는 타입을 먼저 찾고
2. 없으면(또는 2개 이상이면) 변수명과 bean의 이름이 같은것을 찾음
# bean의 이름
1. 아무런 설정이 없으면 클래스명의 첫글자를 소문자로 한것이 이름이 됨
Configuration
@Configuration
클래스 선언부에 작성
Spring container에 Bean 정의 할 수 있도록 사용 될수 있는 class를 나타냄
주로 @Bean 과 함께 사용
@Bean
수동으로 Bean을 등록 할 때 사용