我有一个类,里面要调用我的写好的一个接口实现类
public class UsersRights {
private MeetingUsersDAO meetingUsersDAO; public MeetingUsersDAO getMeetingUsersDAO() {
return meetingUsersDAO;
} public void setMeetingUsersDAO(MeetingUsersDAO meetingUsersDAO) {
this.meetingUsersDAO = meetingUsersDAO;
}
public MeetingUsers userRights(String userName) {
             meetingUsersDAO.checkUserAdmin(iShort, userName);
          }配置文件如下         <bean id="meetingUsersDAO" class="com.anyka.meeting.daoimpl.MeetingUsersDAOImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean> <bean id="users" class="com.anyka.meeting.UsersRights">
<property name="meetingUsersDAO">
<ref local="meetingUsersDAO"/>
</property>
</bean>  运行userRights方法就会报空指针错误。请教高人到底是什么方法有错。。拜谢

解决方案 »

  1.   

    普通类中,你自己直接new呗!
      

  2.   

    能不new~用spring注入的方式实现么
      

  3.   

    看第一段代码//调用
     meetingUsersDAO.checkUserAdmin(iShort, userName);
      

  4.   

    ApplicationContext ctx=new ClassPathXmlApplicationContext("c:\\applicationContext.xml");
    UsersRights usersRights=(UsersRights) ctx.getBean("usersRights");
    usersRights.fuck_you(..);
      

  5.   

    <bean id="users" class="com.anyka.meeting.UsersRights">
            <property name="meetingUsersDAO">
                <ref local="meetingUsersDAO"/>
            </property>
        </bean>
    这个users对象里面的dao不是空的 在这里你已经注入并新建了个对象放在spring容器里 你要调用 users对象checkUserAdmin方法就要 到sring容器里 获得这个对象 
    就像上面说的  
    ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
    UsersRights usersRights=(UsersRights) ctx.getBean("users");
    在调用 usersRights.
      

  6.   

    这是个web工程大哥。。就算要用也是用
    WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(ServletContext);
    而且在普通类中取ServletContext也很麻烦
      

  7.   

       首先查看你的配置文件是否加载     如果加载了试试改成
         <bean id="users" class="com.anyka.meeting.UsersRights">
            <property name="meetingUsersDAO" ref="meetingUsersDAO">
            </property>
        </bean>
        
      

  8.   

      那你写个JUnit 可以试试加载配置文件  能够取得dao对象  你的配置文件 和 调用Dao的类都没问题 
     
      问题肯定是出在框架上
      

  9.   

    用JUNIT测试 可以抛掉视图层 直接加载配置文件 测试业务方法 研究下
    ApplicationContext ctx=new ClassPathXmlApplicationContext("c:\\applicationContext.xml");
    UsersRights usersRights=(UsersRights) ctx.getBean("usersRights");
    usersRights.fuck_you(..);
    和什么工程没关系
      

  10.   

    那我换一种问法。我不想在里面使用spring。我想用依赖注入调用该怎么做
      

  11.   

    可以用apache提供的BeanUtils  private MeetingUsersDAO meetingUsersDAO = BeanUtils.getSpringBean("meetingUsersDAO");
      

  12.   

    建议你把普通的类也进行SPRING的配置
    如果不这样的话你这个就不好NEW了
      

  13.   

    ApplicationContext ctx=new ClassPathXmlApplicationContext("c:\\applicationContext.xml");
    UsersRights usersRights=(UsersRights) ctx.getBean("usersRights");
    这个是测试中的写法
      

  14.   

    我想问的是能不能不用
    ApplicationContext ctx=new ClassPathXmlApplicationContext("c:\\applicationContext.xml");
    UsersRights usersRights=(UsersRights) ctx.getBean("usersRights");
    而只通过注入在普通类中拿到usersRights的对象方法吗
      

  15.   

    你debug到 meetingUsersDAO.checkUserAdmin(iShort, userName)时,meetingUsersDAO为null吗?可能是方法里面别的地方的空指针。
      

  16.   

    如果不用spring的话可以自己实现依赖注入,可以通过读配置文件key存dao,value存实现,通过key得value然后用反射实例化,注入那块可以通过反射得到set方法,然后用反映射注入dao,
      

  17.   

    ApplicationContext ctx=new ClassPathXmlApplicationContext("c:\\applicationContext.xml");
    UsersRights usersRights=(UsersRights) ctx.getBean("usersRights");
    usersRights.fuck_you(..);
    楼主测试代码能执行吗?
      

  18.   

     <property name="sessionFactory" ref="sessionFactory"/>
    难道是sessionFactory大小写的问题
      

  19.   

    可能你配置文件写错了dtd声明写错了 或者是jar包遗漏  最好把控制台中bug信息给我们看 
      

  20.   

    你说的这些都应该没错。因为我这个工程是整合了struts的,一直都运行很正常,我现在只是想把其中配置的一个类拿出来用而已。
      

  21.   

    在你的spring的xml配置文件中的<beans  http://www.springframework.org/schema/beans……后面加上default-autowire="byName"试试,
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
    default-autowire="byName">