Spring не впрыскивает компонент, если он создан по определению - PullRequest
0 голосов
/ 11 августа 2011

У меня бин области действия определен следующим образом:

<!-- this is where the serviceImpl bean is defined -->
<import resource="classpath:META-INF/*-core-context.xml"/>

<bean id="myBean" class="com.company.Bean">
    <property name="service" ref="serviceImpl"/>
</bean>

Теперь внутри бина я определил значение по умолчанию для внедренного сервиса следующим образом:

public class Bean {

    private Service service = new NullService();

    public void setService(Service service) {
        this.service = service;
    }
}

Что яЯ хочу сделать это, предоставив возможность опционально внедрить службу, и если вы решите не Bean, будет использоваться реализация NullService, которая просто ничего не делает, никак не влияя на логику компонента.

Проблема в том, что по какой-то причине serviceImpl никогда не впрыскивается, и я всегда получаю реализацию NullService.

Так есть какая-то пружинная настройка или функция, которая препятствует его впрыскиванию?Или у вас есть другие идеи о том, почему это может произойти?


Дополнительная информация

Это установщик, который пружина использует для ввода службы:

public void setPermissionsService(PermissionService permissionsService) {
    this.permissionsService = permissionsService;

    System.out.println("setting permissions service to: " + permissionsService.getClass().getName());
    if (this.permissionsService instanceof NoopPermissionsServiceImpl) {
        System.out.println("NULL IMPLEMENTATION");
    }
    else if (this.permissionsService instanceof PermissionServiceImpl) {
        System.out.println("CORRECT IMPLEMENTATION");
    }
    else {
        System.out.println("WHAT ?!?!");
    }
}

Он печатает "WHAT ?!?!".

Так получается, что пружина устанавливает его в динамический прокси $Proxy859.Есть ли способ увидеть класс прокси-прокси?

Ответы [ 3 ]

3 голосов
/ 11 августа 2011

Похоже, вам не хватает определения для вашего serviceImpl компонента в вашей конфигурации.Что-то вроде

<bean id="serviceImpl" class="com.company.ServiceImpl" />
1 голос
/ 11 августа 2011

Единственное решение, которое я вижу для вашей проблемы, - это немного перепроектировать это. Сделайте что-нибудь подобное в том же spring.xml:

<bean id="myBean" class="com.company.Bean">
  <property name="service" ref="testServiceImpl"/>
</bean>

<bean id="testServiceImpl" class="com.company.TestServiceImpl" />

Затем реализуйте TestServiceImpl с простыми отладочными сообщениями, указывающими, что конструкция и ваш сервисный вызов действительно работают. Это имеет для работы. Если это так, у вас есть проблема с вашим первоначальным определением сервиса. Если нет, то у вас проблема с Бином.

Попробуйте сузить проблему до более простого. А затем перейдите к более простой задаче.

Удачи!

1 голос
/ 11 августа 2011

Вместо использования instanceof используйте Class.isAssignableFrom (Class)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...