Spring инъекция конструктора показывает ноль При доступе к нему в методах - PullRequest
1 голос
/ 02 июля 2011

Я занимаюсь разработкой небольшого приложения с Struts2 + Spring + hibernate ... Spring bean-компоненты правильно вводятся при запуске сервера. Я прошел через сеттеры при запуске, и они вводят правильно. Однако я запускаю метод post, а затем метод post (execute () в struts2) и введенные значения равны нулю. Почему это происходит?

Инъекция бобов:

<bean id="userAction" class="com.example.user.action.UserAction">
      <constructor-arg  index="0">
            <ref bean="UserServiceTarget"/>
      </constructor-arg>
</bean>

Мой конструктор Struts2:

 public UserAction(IUserService userService) 
   {
       this.userService=userService; 

   } 

Метод Struts2:

* * 1010

Но внутри метода execute значение userService равно нулю ... Когда я внедряю их, они вводятся правильно ..

Спасибо ...

1 Ответ

2 голосов
/ 02 июля 2011

Я думаю, что аргументы-конструкторы - это не способ перебрасывать bean-компоненты другим.Я приведу вам пример:

applicationContext.xml:

<bean id="userAction" class="com.example.user.action.UserAction"/>
<bean id="userServiceTarget" class="com.example.user.UserServiceTarget">

UserAction.java:

@Autowired
private UserServiceTarget userService;

Вы также можете использовать другие конфигурации.Например:

<bean id="userAction" class="com.example.user.action.UserAction">
<property name="userService" ref="UserServiceTarget"/>
</bean>

Таким образом, аннотация Autowired не нужна, только установщик.

Мне не очень нравится xml, поэтому лучше всего использовать аннотации стереотипа.Вы можете использовать аннотацию @Service для своего класса обслуживания, и вы можете забыть объявить bean-компонент в appcontext, но вы должны добавить две строки следующим образом:

<context:annotation-config />

<context:component-scan base-package="com.example"/>

Надеюсь, я помог!

...