/** * Creates a repository of the repository base class defined in the given {@link RepositoryInformation} using * reflection. * * @param baseClass * @param constructorArguments * @return */ @SuppressWarnings("unchecked") protected final <R> R getTargetRepositoryViaReflection(Class<?> baseClass, Object... constructorArguments) { Optional<Constructor<?>> constructor = ReflectionUtils.findConstructor(baseClass, constructorArguments); return constructor.map(it -> (R) BeanUtils.instantiateClass(it, constructorArguments)) .orElseThrow(() -> new IllegalStateException(String.format( "No suitable constructor found on %s to match the given arguments: %s. Make sure you implement a constructor taking these", baseClass, Arrays.stream(constructorArguments).map(Object::getClass).collect(Collectors.toList())))); }
private static Object getEntityInstantiator(MetaData metaData, @Nullable MappingContext<Neo4jPersistentEntity<?>, Neo4jPersistentProperty> mappingContext) { try { Class<?> queryResultInstantiatorClass = Class.forName( "org.springframework.data.neo4j.repository.query.QueryResultInstantiator", true, ClassUtils.getDefaultClassLoader()); Optional<Constructor<?>> queryResultInstantiatorConstructor = ReflectionUtils .findConstructor(queryResultInstantiatorClass, metaData, mappingContext); return queryResultInstantiatorConstructor.map(ctor -> BeanUtils.instantiateClass(ctor, metaData, mappingContext)) .get(); } catch (ClassNotFoundException e) { // It is there, we just don't want to reference it directly. return null; } } }
private static Object constructInstance(Class<?> type, Object... constructorArguments) { return org.springframework.data.util.ReflectionUtils.findConstructor(type, constructorArguments) .map(constructor -> BeanUtils.instantiateClass(constructor, constructorArguments)) .orElseThrow(() -> newIllegalArgumentException( "No suitable constructor was found for type [%s] having parameters [%s]", type.getName(), stream(nullSafeArray(constructorArguments, Object.class)) .map(ObjectUtils::nullSafeClassName) .collect(Collectors.toList()))); }
private static Object constructInstance(Class<?> type, Object... constructorArguments) { return org.springframework.data.util.ReflectionUtils.findConstructor(type, constructorArguments) .map(constructor -> BeanUtils.instantiateClass(constructor, constructorArguments)) .orElseThrow(() -> newIllegalArgumentException( "No suitable constructor was found for type [%s] having parameters [%s]", type.getName(), stream(nullSafeArray(constructorArguments, Object.class)) .map(ObjectUtils::nullSafeClassName) .collect(Collectors.toList()))); }
GraphRepositoryQuery(GraphQueryMethod graphQueryMethod, MetaData metaData, Session session, QueryMethodEvaluationContextProvider evaluationContextProvider) { super(graphQueryMethod, metaData, session); this.evaluationContextProvider = evaluationContextProvider; if (HAS_ENTITY_INSTANTIATOR_FEATURE) { this.entityInstantiator = getEntityInstantiator(metaData, queryMethod.getMappingContext()); this.singleUseEntityMapperUsingInstantiator = ReflectionUtils.findConstructor(SingleUseEntityMapper.class, metaData, entityInstantiator); } else { this.entityInstantiator = null; this.singleUseEntityMapperUsingInstantiator = Optional.empty(); } }