@Controller와 @Component


설정 파일에 <context:component-scan base-package="spring.anno.ch05" /> 이런 식으로 한 줄을 넣어준 뒤

홈 컨트롤러에는 Controller, 워크 클래스에는 @Component를 삽입하면 자동으로 알아서 객체를 다 연결한다.

생성자 생성 필요없고, 설정파일에서 프로퍼티 설정도 필요없다. 



설정 파일에 <context:component-scan /> 태그 사용시 해당 패키지에서 @Controller, @Component 어노테이션이 적용된 클래스를 검색하여 자동으로 Bean을 등록한다.


자동으로 등록된 빈의 아이디는 클래스 이름의 첫 글자를 소문자로 바꿔서 사용.

예) HomeController -> 빈 이름이 homeController 지정


빈의 이름을 다르게 지정하고 싶으면 @Component("home")과 같이 명시함.

또는  @Component  @named("home")도 가능.





1) 홈 컨트롤러 클래스 : 클래스 위에 @Controller 사용


package spring.anno.ch05;


import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;


@Controller

public class HomeController {

@Autowired

private Worker worker;


@Override

public String toString() {

return "HomeController 클래서 실행=>"+worker;

}

}




2) Work 클래스 : 클래스 위에 @Component 사용


package spring.anno.ch05;


import org.springframework.stereotype.Component;


@Component

public class Worker {


@Override

public String toString() {

return "Worker 클래스 실행";

// shift+alt+s 후 s를 누르면 toString으로 필드 및 메서드 포함하여 자동완성 가능.

}

}




3) 실행 클래스

package spring.anno.ch05;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
public static void main(String[] args) {
AbstractApplicationContext factory = 
new ClassPathXmlApplicationContext("applicationContext2.xml");
factory.registerShutdownHook();

HomeController homeController = 
factory.getBean("homeController", HomeController.class);
System.out.println(homeController);

factory.close();
}
}



4) 설정 파일 : context:component-san base-package에 해당 클래스들의 패키지를 써넣는다.


<?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-3.2.xsd">


<!--

<context:annotation-config />

- RequiredAnnotationBeanPostProcessor

- AutowiredAnnotationBeanPostProcessor

- CommonAnnotationBeanPostProcessor 을 자동으로 추가한다.

 -->

 

 <context:component-scan base-package="spring.anno.ch05" />

 

</beans>




Posted by netyhobby
,