java - 使用 Spring 和 Spring Security 正确注入(inject) SessionFactory

标签 java hibernate spring

我有这个异常(exception)

java.lang.NullPointerException
cz.xkadle21.dip.dao.ADiHibernateGenericDAO.findByCriteria(ADiHibernateGenericDAO.java:116)
cz.xkadle21.dip.dao.impl.DiUserDAO.findUserByUsername(DiUserDAO.java:86)
cz.xkadle21.dip.service.impl.DiUserContextSecurityService.loadUserByUsername(DiUserContextSecurityService.java:47)
cz.xkadle21.dip.service.impl.DiUserContextSecurityService.loadUserByUsername(DiUserContextSecurityService.java:1)

我正在关注本教程 Spring Security 3 database authentication with Hibernate

并收到“未定义名为 ... 的 bean”错误。所以我将bean从dispatcher-servlet.xml移动到applicationContext-common-business.xml并更改web.xml中的加载

web.xml

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/applicationContext-common-business.xml 
        /WEB-INF/applicationContext-security.xml
    </param-value>
</context-param>
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

despatcher-servlet.xml 中的 Bean 正在使用组件扫描进行加载,并自动正确地注入(inject) sessionFactory。但 applicationContext-common-business.xml 中的 bean 不是。

applicationContext-common-business.xml

<bean name="userDetailsService"
    class="cz.xkadle21.dip.service.impl.DiUserContextSecurityService" >
     <constructor-arg ref="userDAO" /> 
     <constructor-arg ref="securityUserFactory" />      
</bean>

<bean id="securityUserFactory" class="cz.xkadle21.dip.factory.impl.DiSecurityUserFactory" />
<bean id="userDAO" class="cz.xkadle21.dip.dao.impl.DiUserDAO" />



<bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
    p:location="/WEB-INF/jdbc.properties" />

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close" p:driverClassName="${hibernate.connection.driver_class}"
    p:url="${hibernate.connection.url}" p:username="${hibernate.connection.username}"
    p:password="${hibernate.connection.password}" />


<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation">
        <value>classpath:hibernate.cfg.xml</value>
    </property>


    <property name="configurationClass">
        <value>org.hibernate.cfg.AnnotationConfiguration</value>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.show_sql">true</prop>
            <!-- <prop key="hibernate.hbm2ddl.auto">update</prop> -->
        </props>
    </property>
</bean>

UserDetailsS​​ervice是通过构造函数注入(inject)的,但是如何将sessionFactory注入(inject)到userDAO中呢? SessionFactory在ADiHibernateGenericDAO中定义,所有DAO都扩展了抽象ADiHibernateGenericDAO。上面的异常是在SessionFactory上抛出的,它没有被注入(inject)。

感谢您的回复。

最佳答案

伙计,我没有看到任何事务管理器或

< tx:annotation-driven />

写在 bean 配置文件中的任何位置。如果你还没有的话,你应该把它放在那里。这可能就是问题所在。

关于java - 使用 Spring 和 Spring Security 正确注入(inject) SessionFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5290229/

相关文章:

java - 使用 Commons 或 Guava 将文本文件转换为 Java Set<String>

java - 如何使用@Transactional修复LazyInitializationException?

java - hibernate 中的条件连接获取

java - 想要在jsp中显示与值对应的枚举名称

java - 二叉树 - 带开关盒

java - 如何在模拟时抑制内部方法

java - 使用反射调用外部 JAR/CLASS 上包含 Hibernate 事务的方法 (Java EE)

Spring aop,未绑定(bind)切入点参数

spring - 如何@autowire进入jsf托管bean

java - 在 Hibernate 中是否可以(以及如何)创建与命名查询的关联?