Spring Bean (1)

라이라·2023년 6월 18일
0

스프링은 객체를 ApplicationContext가 관리하고 생성해준다.

개발자가 직접 객체를 생성하지 않는 방식은 서블릿과 유사한데,
서블릿을 생성하면 톰캣이 웹 어플리케이션을 실행하고 필요할 때 서블릿 객체를 만드는 것과 비슷한 방식이다.

@Controller : MVC의 컨트롤러를 위한 어노테이션
@Service : 서비스 계층을 위한 어노테이션
@Repository : DAO와 같은 객체를 위한 어노테이션
@Component : 일반 객체나 유틸리티 객체를 위한 어노테이션

Component-scan : 해당 패키지를 스캔해서 스프링의 어노테이션들을 인식

생성자 주입 방식 규칙

  • 주입받아야 하는 객체의 변수는 final로 작성한다.
  • 생성자를 이용해서 해당 변수를 생성자의 파라미터로 지정한다.

스프링이 DI를 가능하게 하지만 좀 더 근본적으로 유연한 프로그램을 설계하기 위해서 interface를 이용해서 추후 다른 클래스의 객체로 쉽게 변경할 수 있도록 하는 것이 좋다.

interface를 이용하면 실제 객체를 모르고 타입만을 이용해서 코드를 작성하는 것이 가능해진다.

	public interface Dao {
    	...
    }
    
    @Repository
    public DaoImpl implements Dao{
    	...
    }
    
    
	@Service
	public class Service {
    	@Repository
    	private final Dao dao();
    }
    

org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.lsm.spring01.sample.SampleDAO' available: expected single matching bean but found 2: sampleDaoImpl,sampleEventDaoImpl

같은 인터페이스에서 구현한 동일한 두개의 빈이 있어 나온 에러
@Qualifier("")로 이름을 지정해주고 사용할 서비스에서 호출하는 것으로 해결

	public class SampleService {
    @Qualifier("normal")
    private final SampleDAO sampleDAO;
}

스프링의 Bean으로 지정되는 객체는 오랜 시간동안 프로그램 내에서 상주하며 중요한 역할을 하는 객체들이다.
DTO나 VO같이 데이터에 중점을 두고 설계된 객체들은 스프링의 Bean으로 등록되지 않는다.
특히 DTO는 생명주기가 굉장히 짧고 데이터의 보관이 주된 역할이기 때문에 Bean으로 처리되지 않는다.

profile
혼자 보려고 올리는 용도

0개의 댓글