2013-03-07 2 views
1

У меня есть классSpring прототип или поставщик из Java EE

public class Test { 

    @Autowired 
    private Testing abc; 

    public Testing getTesting() { 
    return abc; 
    } 

} 

@Component 
@Scope(BeanDefinition.SCOPE_PROTOTYPE) 
public class Testing { 

    private int i; 
} 

Everytime я вручную создать класс Test с помощью autowire способного боба завода, я ожидал экземпляр тестирования должны быть создан.

Однако сегодня я был введен в новой концепции javax.inject.Provider

public class Test { 

    @Autowired 
    private Provider<Testing> abc; 

    public Testing getTesting() { 
    return abc.get(); 
    } 
} 



@Component 
@Scope(BeanDefinition.SCOPE_PROTOTYPE) 
public class Testing { 

    private int i; 

    //transactional methods 
} 

Какие преимущества это дает?

ответ

2
  • получение нескольких экземпляров.
  • ленивый или необязательный поиск экземпляра.
  • нарушение круговых зависимостей.
  • область абстрагирования, чтобы вы могли искать экземпляр в меньшем объеме из экземпляра в области, содержащей область.

От Java EE Documentation:Provider

UPDATE: Java EE Documentation: Inject Annotation обсуждает, как циклические зависимости в классах может быть нарушена использованием Provider.

Консервативный инжектор может обнаружить циклическую зависимость при построении времени и генерирует ошибку, и в этот момент программист может нарушить круговую зависимость, вводя связь или вместо A или B, соответственно.

+0

, но действительно ли это полезно, если мне всегда будет нужен экземпляр? .. im спрашиваю, как я беседую с разработчиком по этой теме, ГЭС пытается убедить меня, что поставщик - лучший подход? .. ic ant see разница в приведенном выше примере. – user1555190

+0

Обновлен ответ, чтобы включить ссылку и описание, которые могут быть вам полезны. Я не эксперт в этом вопросе. Поэтому не могу комментировать специфику. Но, глядя на настоящий пример (не очень сложный), кажется, что использование любого будет равным. –

Смежные вопросы