Spring Day02

JUNHO YEOM·2023년 2월 21일
0

Spring

목록 보기
11/14

빈을 등록한다는 것은 설정 정보를 읽어와서 빈을 만들 준비를 한다는 것을 말해요

Bean 등록방법
1. 수동 방법 - 외부 Library를 Bean으로 등록해야 하는 경우
2. 자동 방법 - 자동이 훨씬 더 편하고 좋아요!

강제로 수동으로 등록해야 하는 경우를 제외하고 보통 자동방식을 사용해요

수동방법은 등록하기 위한 설정정보가 있어야 해요
annotation을 이용한 처리

bean은 기본적으로 Singleton으로 동작해야 해요
bean이 Singleton으로 동작하기 위해서는
configuration이라는 annotation으로 붙어 있어야 해요

@Configuration
class MyResourceConfig {
	@Bean
    public MyResource getResource(){
    	return new MyResource();
        }
    }

bean의 ID는 method의 이름이에요 자동으로 그렇게 설정되어요!
scope는 다른 Annotation을 사용하지 않으면 기본적으로 Singleton으로 설정됩니다.

annotation도 상속 관계가 있어요
@Component

  • @Controller
  • @Service
  • @Repository
  • @Configuration

Component Scan


프로젝트 Maven 프로젝트로 변경하기

프로젝트에서 디펜던시를 초기화 시키고 다시 적용하려고 할때 Clean을 사용해 볼 수 있어요


Step 8은 어떻게 만들어야 할까요?
어떤것을 Bean으로 등록해야 하고, 어떻게 해야 할까요??

Dao를 직접 안만들고 Bean으로 만들어서
ApplicationContext를 생성한 후 이 ApplicationContext에게 UserDao 객체를 요청해서 받아와서 사용할 거에요

굉장히 많은 Annotation들의 종류가 있어서 각자 자신의 역할을 해요!

Application Context의 기능중 하나는
Singleton Registry
싱글톤을 저장하는 저장소!

Why Singleton으로 Bean을 관리하나요?
Spring을 Server쪽 Application을 구현하기 위해서 사용해요! -> 여러 Client에서 공유되는 객체가 필요하고, Singleton으로 처리해야 효율이 좋아요!


VO는 Bean으로 등록할 수 있을까?

VO는 Stateful (상태정보를 가지고 있어요)해요
따라서 Bean으로 등록할 수 없어요
모든 객체를 Bean으로 등록해서 사용할 수는 없어요
Stateless한 객체만 Bean으로 등록해서 효율적으로 사용하자는 의미에요


의존관계(dependency)

두개의 class를 대상으로 해요
방향성을 명시해야 해요!
하나의 class가 다른 class에 의존하고 있을 테니까
A -> B
A가 B에 의존해요(화살표 방향대로)
A의 입장에서는 의존 대상인 B가 변하면 그 영향이 A까지 미쳐요


Step9

유저 Dao는 ConnectionMaker에 의존하고 있어요
의존하고 있는 객체를 생성자를 통해 주입받았어요

생성자를 통한 주입
setter를 이용한 주입

@Configuration
public class DaoFactory {
	
	@Bean
	public UserDao userDao() {
				
//		UserDao dao = new UserDao(connectionMaker()); // 생성자를 통해 주입하는 방법 
		
		
		UserDao dao = new UserDao();
		dao.setConnectionMaker(connectionMaker()); // setter를 통해서 주입하는 방법
		return dao;
	}
	
	@Bean
	public ConnectionMaker connectionMaker() {
		return new SimpleMakeConnection();
	}
}

XML을 이용한 설정

xml file이 있어야 해요
xml은 문서의 구조가 미리 정해진 형태로 만들어 졌는지 검증하는 기능이있어요
즉, 어떤 xml인지에 따라 사용가능한 tag와 tag구조가 이미 결정되어 있어요

2가지로 이 작업을 수행할 수 있어요

  1. DTD
  2. Schema -> namespace를 이용해서 추가적인 기능을 포함할 수 있어요!

클래스의 생성자를 이용해서 객체를 만들 수 없는 경우
singleton, 추상 클래스

sample 1, 2, 3 : 생성자를 이용해서
sample 4 : Factory-method를 이용해서 생성자가 아닌 다른 방법으로 객체를 만들때

0개의 댓글