본문 바로가기

spring11

[Spring] @Primary 어노테이션 전제조건 1. Controller/ Service/ Repository로 구성되는 계층형 구조를 사용한다고 가정한다. 각 파일의 역할은 다음과 같다. controller → api 진입시점 service → 예외처리 담당 Repository → SQL(DB통신) 담당 2. 각 레포지토리에는 통일된 인터페이스가 주입된다. (implements) 탄생배경 스프링의 IoC(Inversion of Control) 제어의 역전 속성을 이해해야 한다. 제어의 역전이란, 직접 특정인스턴스를 주입하지 않아도 스프링 컨테이너가 대신 생성자를 통해 적절한 레포지토리를 탐색하여 주입해준다는 것을 의미한다. 그렇다면? 만약 2가지 이상의 레포지토리가 같은 인터페이스를 상속받은 상태에서, Service 클래스가 해당 인터페이스.. 2024. 1. 10.
[Spring] 스프링 빈 직접 등록하여 사용하기 ( + 장점 ) 이 글을 쓰는 이유 스프링으로 Restcontroller를 사용하게 되면 Dependency에 따라 자동으로 의존성을 부여한다. 그 뜻은 간단히 풀이하면 스프링 서버를 실행하면 하나의 큰 컨테이너가 실행되고, 그 컨테이너에 gradle파일의 명세대로 컨테이너에 스프링 빈을 등록한다. 스프링은 이처럼 자동으로 스프링 빈을 등록하여 사용할 수 있다. 현재 코드 상황 기본적으로 나는 도메인 기반 폴더구조를 지향한다. 추가적으로 spring코드의 가독성을 높히고 재사용성을 재고하기 위해 크게 3가지로 코드를 분리한다. 1. controller > api 진입지점 2. 예외처리 > Service 폴더에 정리 3. SQL(DB) > Repository 폴더에 정리. 예시로 JdbcTemplate을 userRepos.. 2024. 1. 9.
null 옵션처리 ( 주입할 빈이 없이도 동작해야 할 때 ) 사건의 발단 : 주입할 스프링 빈이 없어도 동작해야 할 때가 있다. 그런데 `@Autowired` 만 사용하면 `required` 옵션의 기본값이 `true` 로 되어 있어서 자동 주입 대상이 없으면 오류 가 발생한다. 자동 주입 대상을 옵션으로 처리하는 방법은 다음과 같다. `@Autowired(required=false)` : 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출 안됨 `org.springframework.lang.@Nullable` : 자동 주입할 대상이 없으면 null이 입력된다. `Optional` : 자동 주입할 대상이 없으면 `Optional.empty` 가 입력된다. //호출 안됨 @Autowired(required = false) public void setNoBean1(.. 2023. 8. 26.
필터 ( includeFilters & excludeFilters ) includeFilters : 컴포넌트 스캔 대상을 추가로 지정한다. excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정한다. 1. 어노테이션으로 MyIncludeComponent / MyExcludeComponent 생성. 2. 어노테이션 설정할 때, 기본 설정 어노테이션 3개 추가로 설정해준다. @Target : 필드, 메소드, 클래스, 파라미터 등 선언할 수 있는 타입을 설정 @Retention : 어느 시점까지 어노테이션의 메모리를 가져갈지 설정 @Documented : javadoc의 부가기능 / 해당 애노테이션 정보를 해당 코드의 문서에 같이 보여준다. (차후 @Documented는 따로 다뤄볼 예정) package hello.core.scan.filter; import jav.. 2023. 8. 20.
@ComponentScan & 의존성 주입(@Autowired) 딥다이브 지금까지 스프링 빈을 등록할 때는 자바코드의 @Bean이나 XML의 을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다. 이렇게 등록해야할 스프링 빈이 수십, 수백개가 되면 일일이 등록하기 어려워진다. → 스프링은 설정정보가 없어도 자동으로 스프링 빈을 등록하는 @ComponentScan이라는 기능을 제공한다. +@ 의존관계도 자동으로 주입하는 @Autowired라는 기능도 제공한다. @ComponentScan이란? 컴포넌트 스캔은 이름 그대로 `@Component` 애노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록한다. 이제 각 클래스가 컴포넌트 스캔의 대상이 되도록 `@Component` 애노테이션을 붙여주자. ※예제를 시행할 때, 주의할 점 'excludeFilters'를 통해 컴포넌트 .. 2023. 8. 18.
@Configuration과 싱글톤 Spring 코드를 보다보면 이상한 점이 있다. 내가 작성한 AppConfig.java 코드를 보자. package hello.core; import hello.core.discount.DiscountPolicy; import hello.core.discount.RateDiscountPolicy; import hello.core.member.MemberRepository; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.member.MemoryMemberRepository; import hello.core.order.OrderService; import hello.core.. 2023. 8. 17.
반응형