의존성
IoC(제어의 역전)
스프링에서의 IoC 컨테이너
스프링 빈을 컨테이너에 등록하는 방법
컴포넌트 어노테이션
@Component 어노테이션을 사용하면 스프링이 자체적으로 등록한다.
@Controller @Service등 Component 어노테이션을 상속받고 있는 어노테이션도 동일하다.
의존성을 주입하고 싶으면 @Autowired 어노테이션을 사용한다.
@Controller
@RequestMapping("/basic")
public class BasicController {
...
}
Bean Configuration에 직접 등록
@Configuration과 @Bean 어노테이션을 이용해 등록한다.
의존성 주입은 Setter로 한다.
@Configuration
public class ApplicationConfig {
@Bean
public BasicController sampleController() {
return new SampleController;
}
}
XML 파일로 설정
claass = 자바 Class이름 (필수)
id = bean 의 id
scope = 객체의 범위 (singleton, prototype 등등)
constructor-arg = 생성 시 생성자에 전달할 인수
property = 생성 시 bean setter에 전달할 인수
init-method, destroy-method
<bean id="아이디" class="클래스이름" scope="스코프종류 ....>
<property name="이름" value="내용"/>
</bean>
스프링에서의 빈 객체 관리하는 방법
스프링 컨테이너는 파라미터로 넘어온 Config 정보(메타데이터)를 사용해 빈을 등록한다.
[bean 메서드명 / bean 객체] 형식으로 저장한다. 이때 객체는 싱글톤으로 관리한다.
설정 정보를 참고해서 의존관계를 주입한다.
DDD(Domain Driven Design)
플로우
Record
자바14부터 등장했다.
데이터 클래스로 순수하게 데이터를 보유하기 위한 특수한 클래스이다.
주로 Entity, DTO에 사용된다.
변경 전
public class SampleHuman {
private final String name;
private final Integer age;
private final Address adress;
public SampleRecord(String name, Integer age, Address address) {
this.name = name;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
public Address getAddress() {
return address;
}
}
필드와 필드를 초기화하는 생성자 그리고 게터가 있다. 위와 같은 클래스는 record타입 클래스로 변경이 가능하다.
변경 후
public record SampleHuman(
String name,
Integer age,
Adress adress
) {}
스프링은 IoC 컨테이너(스프링 컨텍스트)에서 컴포넌트 스캔을 이용하여 빈을 등록한다.
빈을 등록하는 방법은 크게 @Component, @ApplicationConfig, XML 세가지이다.
빈은 [bean 메서드 이름 / bean 객체] 형식으로 싱글톤 방식으로 생성된다.
메타데이터를 통해 빈 객체간 의존성을 부여한다.
이벤트 정의 → 그룹화 → 이벤트 명령어 정의 → 명령어의 Actor/Rule 정의 → 명령어 수행을 위한 Agregate(데이터 객체)정의 → 비즈니스 목적별로 그룹핑 → 그룹핑 관계 도식화
데이터를 보유하기 위한 클래스이다.
자동으로 생성자, 게터, toString, equals, hashCode 생성.