기술 창고/어노테이션 창고(11)
-
@Controller / @Service / @Repository
@Controller / @Service / @Repository Spring Bean 객체를 만들 때 @Component 어노테이션으로 지정하여 해당 객체를 Bean 객체로 등록하고 생성해주었습니다. 하지만 더 나아가서 명확한 역할에 따른 스테레오 타입의 어노테이션들이 있습니다. 대표적인 어노테이션으로는 Controller, Service, Repository 가 있습니다. - @Controller : 클라이언트의 요청을 받아 비즈니스 로직을 수행하는 단계의 서비스로 매핑을 시켜주거나, 모델에서 데이터를 가져오기 위해 연결시켜주는 Bean 객체를 지정하는 어노테이션. - @Service : 비즈니스 로직을 본격적으로 수행하는 Bean 객체 지정 어노테이션. - @Repository : 모델에 데이터를 ..
2023.06.06 -
@Named / @Inject (ft. CDI)
@Named / @Inject CDI (Context and Dependency Injection) 에서는 기존의 스프링에서 사용했던 어노테이션 일부를 대체할 수 있습니다. 그 중에서 대표적인 것이 @Named 와 @Inject 인데, @Named 는 @Component 를 대체할 수 있고, @Inject 는 @Autowired 를 대체할 수 있습니다. 각 대체되는 어노테이션의 용도와 뜻도 유사합니다. @Named : @Component 와 유사하게 Bean객체로 지정하는 어노테이션. @Inject : @Autowired 와 유사하게 의존성 주입 받은 객체를 자동 주입 시켜주는 어노테이션. // CDI 에서는 @Component 대신 @Named 를 대체로 사용할 수 있다. @Named class Bus..
2023.05.31 -
@PostConstruct / @PreDestroy
@PostConstruct / @PreDestroy 어플리케이션을 실행하게 되면 Spring은 자동으로 의존성을 연결하고, 의존성을 자동 연결하는 대로 가장 먼저 @PostConstruct 가 적용된 메소드를 호출합니다. @PreDestroy 는 어플리케이션이 종료될 때 마지막에 수행될 작업을 지정해주는 어노테이션이다. 기본적으로 보유하고 있었던 리소스들을 해제하는 데에 일반적으로 사용됩니다. @PostConstruct : 어플리케이션을 실행 후 의존성이 연결되는 대로 바로 가장 먼저 초기화 작업 혹은 선행 작업을 수행하려고 할 때 사용. @PreDestroy : 어플리케이션이 종료될 때, 의존성 주입받은 객체 사용이 종료될 때, 보유하고 있는 리소스들을 해제하거나 마무리 작업을 수행할 때 사용하는 어노..
2023.05.30 -
@Scope
@Scope 기본적으로 Spring에서 Bean 객체 인스턴스를 생성할 때 하나의 인스턴스만을 생성하고 그것을 재활용하는 Singleton 방식으로 운영됩니다. Bean 객체 생성 사용 방식에는 대표적으로 Singleton, Prototype이 있는데, Singleton 은 앞서 말한 것처럼 하나의 Bean 객체 인스턴스만을 생성하여 재활용하는 방식입니다. 즉, Spring IOC 컨테이너 당 객체 인스턴스가 하나만 존재합니다. Prototype 은 Bean 객체 인스턴스를 요청할 때마다 새로 생성해서 사용하는 방식입니다. 즉, Spring IOC 컨테이너 당 여러개의 객체 인스턴스가 존재할 수 있습니다. 기본적으로 Spring 은 Singleton 방식을 채택하고 있지만, 만약 Prototype으로 객..
2023.05.30 -
@Lazy
@Lazy Lazy 어노테이션은 초기화를 지연시키는 어노테이션입니다. Spring은 기본적으로 즉시 초기화를 기본값으로 가지고 있습니다. Lazy 어노테이션을 적용하게 되면 해당 클래스 객체를 사용하려고 할 때 초기화가 되어 사용되게 됩니다. // 초기화는 기본적으로 EAGER (즉시) 방식으로 된다. 어플리케이션을 실행하면 기본적으로 바로 Component 객체가 생성되고 autowiring이 되는 것이다. // @Lazy 어노테이션을 통해 초기화를 늦출 수 있다. // 지연 초기화를 적용할 경우 해당 Component 객체를 호출해줘야 그 때 초기화되고 호출된다. @Component class ClassA{ } @Component @Lazy class ClassB{ private ClassA clas..
2023.05.30 -
@Primary
@Primary Primary는 Component 객체들 중에서 가장 우선 순위가 높은 Component 임을 명시해주는 어노테이션입니다. 다르게 해석한다면, 기본 Component 로 지정해준다고도 볼 수 있습니다. 동일한 Component 객체들이 존재하고 그 중에서 호출하려고 할 때 이 Primary 를 지정해주면 해당 Component 클래스 객체가 기본값으로 호출되게 됩니다. @Component // Spring Bean 등록 생성 @Primary // ComponentScan 시 우선권 부여. 여러 객체가 Component 가 있어도 이 객체가 우선적으로 호출 실행 public class PackMan implements GamingConsole{ ~ 로직 ~ }
2023.05.30