단 한번만 생성되고 그 이후에는 재사용되는 객체
컨트롤러가 각각 객체를 만들지 않고 한번 등록하고 등록된걸 공유해서 쓴다. = 공유 객체
공유객체가 빈 입니다.
즉
@component 붙인 클래스의 객체 => 빈
빈은 스프링이 관리하는 객체!
@Service
public class ArticleService {
ArticleService를 @Service어노테이션으로 정의한다.
@Controller
public class ArticleController {
@Autowired
private ArticleService articleService;
@Autowired // 필드 주입, final은 뺀다.
컴포넌트가 붙은 애만 @Autowired 할수 있다.
뉴를 안해도 된다!
공유 객체로 설정한 ArticleService를 오토와이어링 해서 새로운 객체를 생성하지 않고 등록된 객체를 갖고와서 쓴다.
잘된다!
아티클 레포지토리도 동일하게한다
어노테이션은
@component = @Service
@component = @Repository
가독성을 위해서...
기존 필드 주입 상태에서 생성자 주입으로 바꿔보자
이런식으로 한다.
기존 필드 주입에서는 final 사용이 안됐는데 이제는 된다. final은 생성자에서 초기화되지않으면 방법이 없다
생성자가 하나인 경우 생성자에 @Autowired 생략 가능
롬복에 final 붙은 생성자만 주입해주는 어노테이션이 있다.
@RequiredArgsConstructor
필드 주입보다는 생성자 주입을 많이 쓰고 @RequiredArgsConstructor을 쓰면 final 생성자 주입시 생략가능하다.
위 사진에서는 필드 주입보다는 생성자 주입을 많이 쓰고 @RequiredArgsConstructor와 생성자 주입이 동시에 있어서 오류가 발생한 상황. AricleService 생성자를 지워주면 된다.