ListBeanDependencyResolver.java
package sprout.beans.instantiation;
import sprout.beans.BeanDefinition;
import sprout.context.PendingListInjection;
import java.lang.reflect.Parameter;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.List;
/**
* List 타입 의존성을 해결하는 resolver
* List 주입의 경우 나중에 postProcessListInjections에서 채워지므로
* 빈 리스트를 반환하고 pending 목록에 등록
*/
public class ListBeanDependencyResolver implements DependencyTypeResolver {
private final List<PendingListInjection> pendingListInjections;
public ListBeanDependencyResolver(List<PendingListInjection> pendingListInjections) {
this.pendingListInjections = pendingListInjections;
}
@Override
public boolean supports(Class<?> type) {
return List.class.isAssignableFrom(type);
}
@Override
public Object resolve(Class<?> type, Parameter param, BeanDefinition targetDef) {
List<Object> emptyList = new ArrayList<>();
// 제네릭 타입 추출
Class<?> genericType = (Class<?>) ((ParameterizedType) param.getParameterizedType())
.getActualTypeArguments()[0];
// 나중에 채울 수 있도록 pending 목록에 등록
pendingListInjections.add(new PendingListInjection(null, emptyList, genericType));
return emptyList;
}
}