개인공부

오늘 공부한 Spring기능

lby132 2021. 9. 11. 22:44

Spring에서 DI는 의존성 주입이다. 하나의 객체를 여러 클래스에 주입 할 수 있다. 

어떤 변경할 일이 생기면 의존성을 주입한 객체만 바꿔주면 그 객체를 주입 받은 모든 클래스도 같이 변한다.

@Autowired라는 의존성 주입을 해주는 어노테이션이 있는데 주입 할 객체에 저 어노테이션을 붙여주면 스프링이 자동적으로 

연결해준다. 주입 할 객체가 하나라면 @Autowired를 생략해도 되지만 두개 이상 이라면 @Autowired를 꼭 붙여줘야한다.

주입 할 빈이 없다면 에러가 발생하는데 이 에러가 나지 않게 방지하기 위해서는 @Autowired(required = false)를 해주면 된다.

 

같은 이름의 빈이 두개가 있을때 어떤 빈을 실행 시켜야할지몰라서 나는 에러가 있다 이때 쓰는 어노테이션 중에는

@Primary와 @Qualifier이 있는데

@Primary는 우선적으로 빈을 실행 시킬수 있다. 먼저 실행할 빈에 이 어노테이션을 달아주면 해당 빈이 먼저 실행 되기 때문에

오류가 나지 않는다 또 @Qualifier("지정한 빈 ID값")을 넣어 주면 오류가 나지 않는다.

예시)

@Autowired

@Qualifier("memberDAO1")

private MemberDAO memberDAO1;

 

@Autowired

@Qualifier("memberDAO2")

private MemberDAO memberDAO2;

 

 

해당하는 타입 빈을 모두 받으려면 

BookService에서 BookRepository를 주입받는 변수의 타입을 List로 변경한다.

 @Autowired

    List<BookRepository> bookRepositories;

 

 

@Configuration이 어노테이션을 클래스 위에 써주면 스프링에게 빈을 등록하겠다고 하는것과 같다

그리고 빈으로 등록할 메소드에 @Bean을 붙여주면 빈으로 등록 되게 된다.

 

그리고 AnnotationConfigApplicationContext는 자바코드에서 빈을 가져올때 쓰는 클래스이고

xml에서 빈을 가져올땐 GenericXmlApplicationContext클래스로 객체를 생성해서 getBean()으로 빈을 가져오면 된다.

 

 

'개인공부' 카테고리의 다른 글

Math.random()  (0) 2021.09.12
스레드중  (0) 2021.09.12
핸들러 어댑터  (0) 2021.09.09
Oauth2.0  (0) 2021.09.02
웹 애플리케이션 서버(was)  (0) 2021.08.26