Возможно, это будет работать:
public class NullFactoryBean implements FactoryBean {
@Override
public Object getObject() throws Exception {
return null;
}
@Override
public Class<?> getObjectType() {
return Object.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
А потом ...
public class ClassNotFoundPostProcessor implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
String[] beanDefinitionNames = beanFactory.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames) {
BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanDefinitionName);
String beanClassName = beanDefinition.getBeanClassName();
try {
Class.forName(beanClassName);
} catch (ClassNotFoundException e) {
beanDefinition.setBeanClassName(NullFactoryBean.class.getName());
}
}
}
}
А потом ...
<beans>
<bean id="exampleBean" class="com.examples.ExampleBean">
<property name="exampleBean2">
<bean class="com.examples.ExampleBean2" />
</property>
</bean>
<bean class="ClassNotFoundPostProcessor" />
</beans>
РЕДАКТИРОВАТЬ: Извините, похоже, что это не поймал внутренние бобы. Я пропустил эту деталь, когда я проверял это. Ловит только бобы верхнего уровня. Кстати, com.examples.ExampleBean, вероятно, все равно не будет загружаться, поскольку он сам напрямую зависит от класса ExampleBean2, который виртуальная машина не найдет, что вызывает ошибку