Как создать пружинный боб, который может быть автоматически подключен с помощью аннотаций? - PullRequest
2 голосов
/ 29 апреля 2011

У меня есть небольшое веб-приложение 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] для зависимости

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 29 апреля 2011

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

<mvc:annotation-driven />

Вам также нужно проверить компонент, но он у вас уже есть.

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

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

public class JSDependencyController {
   @Autowired
   public JSDependencyController(ScriptTagsJSView view){
      this.view = view;
   }
}
2 голосов
/ 29 апреля 2011

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

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