Согласно ответу @altazar ниже, это теперь возможно начиная с весны. 4.2!
Сводка старых решений по состоянию на 29 марта 2012 г.
Как с этой даты Spring SpEL не мог выполнить внутри атрибута class .
Оригинальный вопрос:
Я пытаюсь реализовать динамический класс< Атрибут /code> для bean-компонента Spring, который в конечном итоге устанавливается с использованием комбинации свойства PropertyPlaceHolder и выражения SpEL. Цель состоит в том, чтобы выбрать рабочую или отладочную версию класса для создания экземпляра. Это не работает, и мне интересно, возможно ли этого добиться.
На данный момент у меня есть следующее:
Плоский файл свойств:
Код: Выделить всё
is.debug.mode=false
Код: Выделить всё
Код: Выделить всё
// Get basic ApplicationContext - DO NOT REFRESH
FileSystemXmlApplicationContext applicationContext = new
FileSystemXmlApplicationContext
(new String[] {pathSpringConfig}, false);
// Load properties
ResourceLoader resourceLoader = new DefaultResourceLoader ();
Resource resource = resourceLoader.getResource("file:" + pathProperties);
Properties properties = new Properties();
properties.load(resource.getInputStream());
// Link to ApplicationContext
PropertyPlaceholderConfigurer propertyConfigurer =
new PropertyPlaceholderConfigurer() ;
propertyConfigurer.setProperties(properties) ;
applicationContext.addBeanFactoryPostProcessor(propertyConfigurer);
// Refresh - load beans
applicationContext.refresh();
// Done
Example example = (Example) applicationContext.getBean("example");
Код: Выделить всё
Caused by: java.lang.ClassNotFoundException:
#{ true ? com.springtest.ExampleDebug : com.springtest.ExampleProd}
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
. . .
Код: Выделить всё
true
Кстати, я знаю о новой функции профилей 3.1, но я хотел бы сделать это через SPeL по ряду причин. Я использую контекст и пути на основе файловой системы — для этого у меня тоже есть причины.
Подробнее здесь: https://stackoverflow.com/questions/990 ... laceholder