Я загружаю дополнительные определения одноэлементных компонентов во время выполнения из внешнего файла JAR в существующий XmlWebApplicationContext моего приложения:
BeanFactory beanFactory = xmlWebApplicationContext.getBeanFactory();
DefaultListableBeanFactory defaultFactory = (DefaultListableBeanFactory)beanFactory;
final URL url = new URL("external.jar");
final URL[] urls = {url};
ClassLoader loader = new URLClassLoader(urls, this.getClass().getClassLoader());
defaultFactory.setBeanClassLoader(loader);
final ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(defaultFactory);
final DefaultResourceLoader resourceLoader = new DefaultResourceLoader();
resourceLoader.setClassLoader(loader);
scanner.setResourceLoader(resourceLoader);
scanner.scan("com.*");
Object bean = xmlWebApplicationContext.getBean("externalBean");
После всего вышеперечисленного xmlWebApplicationContext содержит все внешние определения bean-компонентов.
Но когда я пытаюсь получить бин из контекста, генерируется исключение:
Couldn't generate CGLIB proxy for class ...
В режиме отладки я увидел, что в процессе инициализации компонента первый раз создается прокси
org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator
и чем пытаются генерировать прокси с
org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator
, но терпит неудачу с упомянутым исключением.