Struts2 Dependency Injection
В настоящее время я создаю веб-приложение, используя Struts2 с плагином Struts2-spring.
вот фрагмент моего приложения Context.xml
<bean id="sessionFactory" scope="singleton"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml" />
</bean>
<!-- Springs Hibernate Transaction Manager -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven />
<!-- Create DAO Objects -->
<bean id = "userDao" class = "org.hitplay.users.dao.UserDao" scope = "singleton">
<property name ="sessionFactory" ref = "sessionFactory" />
</bean>
<bean id = "adminDao" class = "org.hitplay.admin.dao.AdminDao" scope = "singleton">
<property name ="sessionFactory" ref = "sessionFactory" />
</bean>
<bean id="authenticateLoginService" class="org.hitplay.services.AuthenticateLoginService" scope="singleton">
<property name="userDao" ref="userDao" />
<property name="adminDao" ref="adminDao" />
</bean>
<bean id="accountAuthenticationManager" class="org.hitplay.authentication.manager.AccountAuthenticationManager" scope="singleton">
<property name="authenticateLoginService" ref="authenticateLoginService" />
</bean>
Вот мой класс AccountAuthenticationManager
@Transactional
public class AccountAuthenticationManager implements AuthenticationManager {
protected static Logger logger = Logger.getLogger("service");
// Our custom DAO layer
private AuthenticateLoginService authenticateLoginService;
public AuthenticateLoginService getAuthenticateLoginService() {
return authenticateLoginService;
}
public void setAuthenticateLoginService(
AuthenticateLoginService authenticateLoginService) {
this.authenticateLoginService = authenticateLoginService;
}
public Authentication authenticate(Authentication auth) throws AuthenticationException {
System.out.println(authenticateLoginService);
//Some more codes here
}
Как вы можете видеть на нашем картографировании, мы вводим authenticateLoginService
внутри AccountAuthenticationManager
учебный класс. мы даже предоставили сеттеры и геттеры для authenticateLoginService
но, как вы можете видеть, когда мы запускаемauthenticate(Authentication auth)
метод authenticationLoginService
возвращает ноль, мы понятия не имеем, почему это происходит. обратите внимание, что AccountAuthenticationManager не является действием Struts
В настоящее время мы используем плагин Struts2-Spring и Spring Security.
1 ответ
Stackru не нравится иметь длинный список комментариев, поэтому я продолжу здесь. Итак, есть два разных случая AccountAuthenticationManager
в вашей системе. Допустим, созданный Spring во время запуска называется instanceA
и неизвестный по имени instanceB
, Если instanceB
не создается контейнером Spring, то нет способа, которым instanceB
может решить его зависимость (AuthenticateLoginService
). Если вы можете выполнить отладку в системе, вы можете заглянуть в дамп потока и выяснить, когда и где instanceB
кем создан и создан?