2011-04-29 4 views
2

У меня есть небольшое веб-приложение MVC с контроллером, настроенным с помощью аннотаций.Как создать весенний боб, который можно автообновить с помощью аннотаций?

Настройка xml проста.

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans.xsd 
         http://www.springframework.org/schema/context 
         http://www.springframework.org/schema/context/spring-context.xsd"> 

<context:component-scan base-package="net.dynamic_tools.jsdependency" /> 
</beans> 

Мой контроллер выглядит

@Controller 
@RequestMapping("/*") 
public class JSDependencyController { 

    @Autowired 
    private ScriptTagsJSView scriptTagsJSView; 

Я получаю сообщение об ошибке не говоря

Нет соответствующих компонент типа [net.dynamic_tools.jsdependency.view.ScriptTagsJSView] найдено зависимость

Я попытался добавить аннотацию компонента к Scr itTagsJSView

@Component("scriptTagsJSView") 
public class ScriptTagsJSView implements View { 

не повезло. Я также попытался добавить конфигурации POJO и используя @Bean аннотацию

@Configuration 
public class Config { 
    @Bean 
    public ScriptTagsJSView getScriptTagsJSView() { 
     return new ScriptTagsJSView(); 
} 

Я, вероятно, отсутствует что-то довольно простое, но я не могу понять, почему это не работает. Есть идеи?

+0

Какой пакет ScriptTagsJSView в? Пакет базового пакета компонентного поиска выполняет поиск только из пакета, который вы указываете вниз, поэтому, если этот класс находится за пределами этого пакета, он не будет отсканирован. EDIT: см. Мой ответ ниже, но также рассмотрите вышеприведенный комментарий. – Jberg

+0

Спасибо за ваш ввод. Оцените усилия. Оказывается, проблема заключалась в том, что я был идиотом. Файл xml, который, как я думал, он использовал, не был файлом xml, который он фактически использовал. Тот, который он фактически использовал, - это сканирование с net.dynamic_tools.jsdependency.controller и, следовательно, отсутствие аннотаций в net.dynamic_tools.jsdependency.view. annotation-config, похоже, не требуется. –

+1

Для тех, кто хочет это сделать, аннотация @Component - это то, что я получил. Я удалил класс @Configuration и @Bean. –

ответ

2

Я думаю, вам может понадобиться <context:annotation-config/> в вашем xml.

2

Прежде всего, вы хотите использовать тег, управляемый аннотациями. Это удостоверится Spring инициализирует все классы аннотированные с @Controller, @Repository, @Service и @Component

<mvc:annotation-driven /> 

Кроме того, необходимо проверить компонент, но у вас уже есть.

Возможно, вы также захотите воздержаться от предоставления имен своим фасолью, поскольку весна будет соответствовать только типам. (не используйте @Component ("scriptTagsJSView"), а просто @Component)

Наконец, вам нужно добавить @Autowired, где вам нужно вводить инъекции. Лично я использую его только в сочетании с конструкторами.

public class JSDependencyController { 
    @Autowired 
    public JSDependencyController(ScriptTagsJSView view){ 
     this.view = view; 
    } 
} 
Смежные вопросы