2014-01-15 2 views
3

ВОПРОС:Spring впрыскивается ресурс всегда пустой

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

ФОН:

У меня есть два фасоль один называется от другого. Это, как они определены в XML конфигурации:

<context:annotation-config /> 
<bean class="com.test.MyBeanImpl" name="myBean"/> 
<bean id="myService" class="com.test.MyServiceImpl" /> 

и бобы реализованы следующим образом:

MyServiceImpl.java

class MyServiceImpl implements MyService { 
    public void getString() { 
     return "Hello World"; 
    } 
} 

MyBeanImpl.java

@Component 
class MyBeanImpl implements MyBean, SomeOtherBean1, SomeOtherBean2 { 
    @Resource(name="myBean") 
    private MyService myService; 

    public MyBeanImpl() {} 
} 

ВОПРОСЫ:

Есть ли какая-то причина, связанная с тем, что моя фасоль реализует 3 интерфейса, которые препятствуют внедрению Сервиса? Если бы не какие-то другие факторы могли это сделать?

+0

Не могли бы вы опубликовать объявление класса для класс, который вы пытаетесь ввести «MyService» и всю конфигурацию? –

+0

Я обновил OP, чтобы включить дополнительную информацию. В основном у меня нет комментариев в интерфейсе MyService или классе реализации. Cheers – travega

+0

Если ваш конфигурационный файл bean не содержит '' Я не верю, что '@ Resource' будет работать. См. Суть, которую я опубликовал. Я тестировал и работает. Если это не соответствует вашим потребностям, дайте мне знать, как изменится ваша ситуация, и я изменю. –

ответ

5

, как вы используете аннотации Просто отметьте свой класс обслуживания с @Service аннотацию и использовать @Autowired аннотации, чтобы получить экземпляр вашего класса обслуживания

MyServiceImpl.java

package com.mypackage.service; 
@Service 
class MyServiceImpl implements MyService { 

    public void getString() { 
     return "Hello World"; 
    } 
} 

MyBeanImpl ,Java

@Component 
class MyBeanImpl implements MyBean, SomeOtherBean1, SomeOtherBean2 { 

    @Autowired 
    private MyService myService; 

    public MyBeanImpl() {} 
} 

также убедитесь, что вы упоминаете ваше имя пакета в <context:component-scan /> элемента в вашем диспетчерский файл в

<context:annotation-config /> 
<context:component-scan base-package="com.mypackage" /> 

надеюсь, что это решит вашу проблему

1

Убедитесь, что компонент, который вы впрыскиваете MyService, является фасолью.

/* This must be a bean, either use @Component or place in configuration file */ 
@Component 
public class SomeClass{ 
    @Resource 
    private MyService myService; 
} 

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

<context:annotation-config/> 

С вашей помощью нескольких интерфейсов может быть лучше, чтобы квалифицировать боб с именем :

<bean class="com.test.MyBeanImpl" name="myBean" /> 

Затем укажите элемент имя на @Resource аннотацию

@Resource(name="myBean") 
private MyService myService; 

Вот Github Gist, который объясняет эти понятия.

+0

Привет, Кевин, во-первых, благодарю вас за то, что вы пытаетесь создать Git Gist. Существует небольшая разница в том, что компонент, который вы определили как MyApp, является тем, который реализует 3 интерфейса, а компонент MyServiceImpl реализует один интерфейс «MyService». Когда я попробую ваши предложения выше, я теперь получаю сообщение об ошибке развертывания, в котором говорится, что нет bean, называемого «myBean», потому что ваш «SomeClass» - это то, что я называю «MyBeanImpl». Я обновлю свой OP, чтобы сделать его понятным – travega

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