2012-03-15 2 views
1

Я хочу перевести следующую конфигурацию DI на основе Guice в Spring, основанный на Java.Spring DI с использованием устаревших объектов, которые не могут быть обработаны

public class UserModule extends AbstractModule { 

    private final User user; 

    public UserModule(User user) { 
     this.user = user; 
    } 

    @Override 
    protected void configure() { 
     // don't need to do any configuration 
    } 

    @Provides @Singleton 
    User provideUser() { 
     return user; 
    } 

    @Provides @Singleton @Inject 
    UserStorageService provideUserStorageService(User u) { 
     return new UserStorageServiceImpl(u); 
    } 
} 

Предполагается использовать затем

Injector userOneInjector = Guice.createInjector(new UserModule(userOne)); 
Injector userTwoInjector = Guice.createInjector(new UserModule(userTwo)); 

К сожалению, AnnotationConfigApplicationContext Spring занимает в классе конфигурации, а не объект, поэтому я не знаю, как вводить объект пользователя в его конфигурации.

ответ

2

Отдельный класс @Configuration для изоляции «нестандартного» объекта?

@Configuration 
public class ConfigA { 
    public @Bean User getUser() { 
     // Here do whatever it takes to create/lookup the user 
     return new User(); 
    } 
} 
+0

Но создание/поиск CannotBeBeanified требует использования объектов, которые ограничены вне конфигураций. С Guice я могу передать их как конструктор args, пытаясь понять, как это сделать с Spring. Что делать, если конструктор CannotBeBeanified использовал String или File, который был доступен только во время выполнения, например? – Jacob

+0

Как вы относитесь к области вне конфигурации? –

+0

Извините, я думаю, что мой комментарий не был хорошо написан. Я обновил пример в вопросе, надеюсь, его более ясно? В новом примере я не хочу создавать новых пользователей, я хочу использовать объекты, к которым у меня уже есть ссылка, но я не вижу, как это сделать без использования синглета. – Jacob