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 кем создан и создан?

Другие вопросы по тегам