객체를 생성해주는 어노테이션 Component이다
위치는 클래스명 위에다가 작성해주면된다
@Component("console")
public class InlineExamConsole implements ExamConsole {
@Autowired(required = false)
@Qualifier("exam2")
private Exam exam;
위의 형식과 같이 @Component를 사용하면 되는데 이때 괄호 안의 문장이 Bean에서 id 역활을 하게 된다.
ApplicationContext context = new
ClassPathXmlApplicationContext("spring/di/setting.xml");
ExamConsole console = (ExamConsole)context.getBean("console");
console.print();
Component에서 id를 console로 지정했고 메인에서 console로 해당 클래스를 객체화 시키는 것을 볼 수 있다
Component 어노테이션을 사용할 때 반드시 셋팅해야하는 값
<context:component-scan base-package="spring.di.ui, spring.di.entity"></context:component-scan>
Component 어노테이션을 사용할 때는 반드시 위의 코드를 입력해야한다. Spring이 아무리 편하다지만 어디에 어노테이션을 사용하는지 까지 알지 못한다. 그렇기에 개발자가 어노테이션이 어디에 들어가있는지를 입력해줘야만 한다. component-scan으로 @Component 뿐만 아니라 @Autowired까지 읽어들일 수 있다
해당 private int kor 같은 변수의 위에 @Value("20") 이런 식으로 값을 넣으면 된다
@Component는 밑의 세가지를 통괄해서 사용할 수 있는 어노테이션이다
1. Controller
2. Repository
3. Service
@Component
@Controller
@Repository
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
@Service
일반적으로 컴포넌트 클래스들에 @Component를 붙일 수 있지만, @Repository, @Service, @Controller를 붙인다면 도구들이 클래스들을 처리하는데 더 적합하도록 할 수 있고 관점(aspects)에 더 연관성을 부여할 수 있다. - AOP 를 통한 처리가 쉽게 가능하다
원래 xml로 Bean이나 Component scan을 해왔지만 Java 클래스에 어노테이션을 이용해서 스프링 IOC컨테이너에 Bean을 등록할 수 있다
Java 형식의 Configuration 파일
@ComponentScan("spring.di.ui")
@Configuration
public class NewlecDIConfig {
@Bean
public Exam exam() {
return new NewlecExam();
}
}
Xml 형식의 Configuration 파일
<context:component-scan base-package="spring.di.ui, spring.di.entity"/>
<bean id="console" class="spring.di.ui.InlineExamConsole"></bean>
형식으로 xml 파일을 대신할 수 있다