<aside> 💻 어노테이션을 사용하지만 정확히 이해가 어려워서 공부하게되었습니다
</aside>
왜 서비스,레포지토리,컨트롤러는 모두 컴포넌트 클래스에서 파생 되었으나 각각 이용해주는 것 일까요? 단순히 이야기하지만 각각의 어노테이션은 각 클래스에 대한 역할을 이야기하는 역할을 가지고 있기 때문입니다.
예를 들어 RestController 어노테이션의 경우, 단어그대로 rest api에 대한 로직만 들어가게 되고 , 유사하게 service클래스와 관련된 것을보면 내부에 비지니스 로직이 있는 것을 확인할 수있습니다. 어노테이션은 단순히 클래스에 롤을 설명하는 것 뿐만 아니라 의미 있는 어노테이션을 이용하는 것 역시 좋은 연습이 될 것입니다.
스프링 코어와 관련된 어노테이션들은 아래와 같습니다
@Configuratoin
@Bean
@Autowired
@Qualified
@Lazy
@Value
@PropertySource
@ConfigurationProperties
@Profile
@Scope
이 두개의 어노테이션은 자바 기반의 설정을 진행할때 이용됩니다. 이때 자바 기반의 설정 이란 빈의 라이프 사이클을 xml이나 bean을 이용해서 다룰 것을 이야기합니다.즉 클래스는 IoC Container 에서 빈의 자원으로서 사용될 수있다는 것을 이야기합니다. 직접 사용하면서 확인해볼까요?
package com.didi.calender.config;
import org.springframework.context.annotation.Configuration;
@Configuration
public class BeanConfig {
}
위와같이 @Configuration 어노테이션을 선언한다면 스프링은 이 클래스에서 객체를 리턴해주는 bean 을 생성할 것을 기대하게 됩니다.이제는 이 내부에 들어갈 bean을 별개로 만들어볼까요? 특정 값을 리턴해주는 bean 을 만들어주었습니다
package com.didi.calender;
public class TestBean {
public void metod(){
System.out.println("this is bean");
}
}
단순히 이 bean 에 @Component
어노테이션을 이용해줄 수도있지만, 이번에는 아래와 같이 이용해 줄 수있습니다
@Configuration
public class BeanConfig {
@Bean
public TestBean testBean(){
return new TestBean();
}
}
만들어준 TestBean
클래스를 이용해 이 TestBean
를 리턴해주는 메소드를 만들고 이를 @Bean
어노테이션으로 정의해주는 것입니다.
그래서 어플리케이션을 시작하게 된다면 spring IoC Container는 이 @Configuration
어노테이션을 검색하고 내부의 @Bean
역시 찾게됩니다. 이 빈을 찾게되면 객체를 생성하고 생명주기를 유지하게됩니다. 그리고 이렇게 형성된 빈은 우리가 이용하고 싶은 곳 어디서나 이용할 수있습니다.
목적
자동적으로 객체를 주입하기위해
설명
객체를 주입하기 위해 이용됩니다. 만약에 이 어노테이션이 없는 경우에는 스프링은 이 객체를 찾기 못하게됩니다.스프링 부트에게 이러한 빈을 주입시킨다는 것을 이야기하기위해서 위의 어노테이션을 이용하게됩니다.