resource required not found之Bean property 'sessionFactory' is not writable or has an invalid setter


这个错误要搞死我,对于java dynamic web的恨意大概都来源于此。

首先,看到这个错误先明确一定是applicationContext.xml配置出现了错误,而且应该是datasource中的bean的配置出现了问题。

1.你的bean配置:

bean配置有四层,除去sessionFactory那一层还应该有三层:action/dao/service。下面是每一层的一个bean配置为例,详细说明这种情况应该注意的点:


<bean id="usersAction" class="actions.UsersAction" scope="prototype">
        <property name="usersService" ref="usersService"/>
bean>


<bean id="usersService" class="service.impl.UsersServiceImpl">
        <property name="usersDao" ref="usersDao"/>
bean>


<bean id="usersDao" class="dao.impl.UsersDaoImpl">
        <property name="sessionFactory" ref="sessionFactory"/>
bean>

注意
在action/ServiceImpl类中实例化的Service/Dao变量的名字应该与配置文件中指定的名字一样,其get与set方法也一定命名好(name还是ref我没有查…因为一直都是保持一样的,抱歉)。比如说,在上述例子中,在UsersAction中实例化了UsersService,实例化的变量命名与对应方法应该是这样:

//在UsersAction中
private UsersService usersService;
public void setUsersService(UsersService usersService){
    this.usersService=usersService;
} 
public UsersService getUsersService(){
    return this.usersServce;
}

这里有一个建议,如果使用eclipse ee来编程,写完private UsersService usersService;这一句之后直接使用快捷键shift+alt+S,出现popup菜单,选择generate setters and getters直接选择你要为之生成set与get方法的变量即可,不用担心写错。毕竟这里参数命名太重要了。

去看一看:1.bean中的property中的名字配置与你在类中实例化参数命名是否一致。2.你实例化的参数有没有对应的set与get方法。3.你的set与get方法的命名与你直接使用快捷键generate的名字是不是一样的。

2.你的DaoImpl类有没有extends HibernateDaoSupport

如果没有的话就extends一下就好,或者不用这个类的话,可以在DaoImpl类中定义sessionFactory这个参数(必须同名!!!),然后使用我上面说的shift+alt+S快捷键generate setter and getter的方法为之生成set与get方法。

参考:错误信息:Bean property ‘sessionFactory’ is not writable or has an invalid setter method.

你可能感兴趣的:(javawebssh)