2012-01-18 1 views
3

Я хочу, чтобы создать источник данных компонента программно в зависимости от арг, передаваемой от пользователя, тоКак создать bean-компонент при запуске приложения перед загрузкой весеннего контекста?

public class Main { 
    public static void main(String[] args) throws IOException, InterruptedException {  
     //TODO load proper configs depending on args 
     //TODO initiate dataSource bean with UN and PS in args 
     ApplicationContext context = new ClassPathXmlApplicationContext("config/applicationContext-common.xml"); 
    } 
} 

Я сделал немного погуглите уже и нашел, что я должен создать пост процессора боб, который создает источник данных боб и программно настраивает его с помощью извлеченных данных. То, что я хотел бы увидеть, - настоящий пример.

ответ

3

Вы можете попробовать код ниже, он должен вводить источник данных перед подключением.

public class Main { 
    public static void main(String[] args) throws IOException, InterruptedException {  
     //TODO load proper configs depending on args 
     //TODO initiate dataSource bean with UN and PS in args 
     ApplicationContext context = new ClassPathXmlApplicationContext("config/applicationContext-common.xml") { 
      protected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) { 
      super.prepareBeanFactory(beanFactory); 
      beanFactory.registerSingleton("dataSource", dataSource); 
      } 
     }; 
    } 
} 
+0

хорошо, это означает, что если у меня есть еще один компонент, который зависит от 'dataSource' и имеет метод инициализации, который использует' dataSource' я должен программно зарегистрировать его, а также перед обновлением контекста и так далее? –

+0

@MustafaZidan no, init не будет вызываться, пока вы не вызовете 'refresh()'. Вы должны иметь возможность включать beans в зависимости от «dataSource» в вашем xml. – mrembisz

+0

aha, получилось, это было полезно :) –