TIL

TIL - 2024/05/21

기석김 2024. 5. 21. 20:08

새로운 강의가 들어오고 intellij에서 프로젝트를 만들고

테스트 파일을 run 했는데 처음보는 오류가 떴다

오류

 

구글에도 쳐 봤는데 jdk 문제라고 하길래

jdk도 새로 깔고 시스템 환경 변수 설정에 가서 환경변수 경로도

다시 설정해줬다. 약 1시간이상 찾아보고 고민해봐도 안돼서

여쭤봤다. 튜터님께

튜터님께서는 바로 오류를 보시고 찾아주신다음에

하나의 코드를 주셨다. gradle에 첨부를 했다

testImplementation 'org.mockito:mockito-core:3.10.0'

오류가 나는 친구의 의존성을 추가해주고 돌고래를 누르니

바로 실행이 됐다. 최신버전+예외방지 덕분이다

해결

 

 

Bean을 수동으로 등록하는 방법

@Configuration
public class PasswordConfig {

	@Bean
	public PasswordEncoder passwordEncoder() {
		return new BCryptPasswordEncoder();
	}
}

같은 타입의 Bean이 2개라면? 

@Autowired 사용

@SpringBootTest
public class BeanTest {

	@Autowired
	Food pizza;
    
	@Autowired
	Food chicken;
}

 

@Primary 사용

@Component
@Primary
public class Chicken implements Food {
	@Override
	public void eat() {
		System.out.println("치킨을 먹습니다.");
	}
}
@SpringBootTest
public class BeanTest {
	@Autowired
	Food food;
}

 

@Qualifier 사용

@Component
@Qualifier("pizza")

public class Pizza implements Food {
	@Override
	public void eat() {
		System.out.println("피자를 먹습니다.");
	}
}
@SpringBootTest
public class BeanTest {
	@Autowired
	@Qualifier("pizza")
	Food food;
}

 

만약 Qualifier와 Primary가 동시 적용 됐다면 ?

@SpringBootTest
public class BeanTest {

	@Autowired
	@Qualifier("pizza")
	Food food;
    
	@Test
	@DisplayName("Primary 와 Qualifier 우선순위 확인")
	void test1() {
		// 현재 Chicken 은 Primary 가 적용된 상태
		// Pizza는 Qualifier 가 추가된 상태입니다.
		food.eat();
	}
}

 

※ 같은 타입의 Bean들에 Qualifier와 Primary가 동시에 적용되어있다면 Qualifier의 우선순위가 더 높다

※ 하지만 Qualifier는 적용하기 위해서 주입 받고자하는 곳에 해당 Qualifier를 반드시 추가해야 한다

※ 같은 타입의 Bean이 여러 개 있을 때는 범용적으로 사용되는 Bean 객체에는 Primary를 설정하고

지엽적으로 사용되는 Bean 객체에는 Qualifier를 사용하는 것이 좋다