2010-09-18 3 views
0

Я довольно новичок в Spring DI. У нас есть два класса: PhysicalService и PhysicalDAO. Экземпляр физической службы создается динамически с использованием некоторого обработчика службы, поэтому он не является управляемым компонентом Spring. Физический экземпляр DAO управляется Spring Beans. Есть ли способ, с помощью которого я могу вводить физическое dao в физическое обслуживание?Инъекция весенней зависимости

+0

'создан динамически с использованием какого-либо обработчика сервисов, какой он обработчик? или Вы создаете класс PhysicalServiceFactory для создания экземпляра PhysicalService? –

ответ

1

Является ли сервис-обработчик весенним бобом? Затем вы можете ввести DAO в обработчик сервиса, и обработчик службы может предоставить его службе, когда она ее создаст.

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

Сказали, почему вам нужен сервис-обработчик? Вы уверены, что не можете использовать весну для создания сервисов?

Edit: Если вы можете избавиться от файла свойств я бы включить все услуги в пружинную фасоль, идентификаторы соответствуют предоставленному идентификатору обработчика, впрыснуть контекст приложения в обработчик службы, и сделать:

public Object getInstance(String id) { 
    return applicationContext.getBean(id); 
} 

Чтобы перенести параметры файла весны, я использовал бы регулярную замену выражения.

+0

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

0

Вы сказали ServiceHandler, что ящик PhysicalService с использованием Factory Pattern.

Сначала вы должны ввести PhysicalDAO на завод, вы можете определить его в контексте весны или с помощью аннотации с автоподдержкой.

//spring-context.xml 
<bean id="physicalDAO" class="package.dao.PhysicalDAO"> 
//inject reference needed by dao class 
</bean> 

<bean id="physicalServiceFactory" class="package.service.PhysicalServiceFactory"> 
     <property name="physicalDAO" ref="physicalDAO " ></property> 
</bean> 

и в классе фабрики вы можете написать код следующим образом:

PhysicalServiceFactory { 
    private PhysicalDAO physicalDAO; 

    public void setPhysicalDAO(PhysicalDAO _physicalDAO) { 
     physicalDAO = _physicalDAO; 
    } 

    public PhysicalService create(String id) { 
     PhysicalService ps = PhysicalService(id); 
     ps.setPhysicalDAO(physicalDAO); 
      return ps; 
    } 
} 
0

Пока приложение весна конкретное приложение, ниже простые шаги могут помочь придать PhysicalDAO к PhysicalService в аннотаций способом.

//Add this spring annotation to add your DAO class to Spring container 
@Component("physicalDAO") 
public class PhysicalDAO { 

} 

//Add Service class with PhysicalDAO object reference to use. 
public class PhysicalService { 

    @Autowired 
    PhysicalDAO physicalDAO; 

} 

Определите нижеприведенные данные в файле конфигурации пружины.

<context:annotation-config></context:annotation-config> 
<context:component-scan base-package="com.cognizant.aop.annotation"></context:component-scan> 
Смежные вопросы