등록시에는 앞글자가 소문자로 바뀌어서 저장된다.
클래스 위에 달면 Bean에 등록한다.
생성자하 하나일때만 생략가능하다. IOC컨테이어에 의해 관리되는 클래스만 사용 가능하다.
ex) @Component
final이 붙거나 @NotNull 이 붙은 필드의 생성자를 자동 생성해주는 롬복 어노테이션
Spring 3 Layer Annotation은 Controller, Service, Repository의 역할로 구분된 클래스들을 Bean으로 등록할 때 해당 Bean 클래스의 역할을 명시하기위해 사용됩니다.@Controller, @RestController@Service@Repository@Component가 아닌 3 Layer Annotation을 사용해도 무관하다.어플리케이션을 Run하면
@ComponentScan이 @Component을 읽어서 Bean으로 등록@AutoWired ..즉 DI주입이 필요한 것들에 Bean들을 주입한다. (필요한 코드들을 자동으로 생성한다고 보면 된다.)ApplicationContext는 BeanFactory등을 상속하여 기능을 확장한 Container 입니다.BeanFactory는 Bean 의 생성, 관계설정등의 제어를 담당하는 IoC 객체입니다.IOC컨테이너라고 생각하면 된다.public MemoService(ApplicationContext context) {
// 1. 'Beab' 이름으로 가져오기
// MemoRespository memoRepository = (MemoRespository) context.getBean("memoRespository");
// 2. 'Bean' 클래스 형식으로 가져오기
MemoRespository memoRepository = context.getBean(MemoRespository.class);
this.memoRepository = memoRepository;
}
Spring에서 IOC컨테이너에서 컨트롤러 빈을 찾아서 사용하라고 전달한다.
exclude: 특정 클래스를 자동 설정에서 제외함
Enum타입을 DB에 저장할 때 사용한다.Enum이름 그대로를 반환한다.user부분에 들어가는 부분은 외래키의 주인인 상대 엔티티에 있는 필드명을 의미한다.등록, 수정, 삭제할 수 있으며, 주인이 아닌 쪽은 오직 외래 키를 읽기만 가능합니다. 직접 this를 사용해 직접 연관관계를 설정해 주는 것은 괜찮다.DB에 문제는 없지만 다음과 같은 상황에서는 문제가 생길 수 있다.Insert 후 Select 쿼리를 날리지 않고 바로 보려고 한다면 주인이 아닌쪽은 동기화가 되지 않는다.cascase옵션을 사용하여 영속 상태의 Entity에서 수행되는 작업들이 연관된 Entity까지 전파한다.@Transactional을 붙이지 않아도 된다. 다만fetch = FetchType.LAZY일 경우 영속성 컨텍스트가 유지돼어야 다른쪽 엔티티를 조회할 수 있다.Delete쿼리를 날릴땐 cascade.REMOVE옵션을 달면 연관된 테이블도 같이 수행한다.orphanRemoval = true로 설정한다.cascade.REMOVE 기능도 포함하고 있다.ManyToOne에서는 사용할 수 없다.일정시간마다 동작을 수행할 수 있게 해준다. 시작부분에 @EnableScheduling을 붙여줘야 한다.