先上demo code
public class Deme{
private IXXDao dao = null;
//set, get 方法省略
private void doXXX(){
 List list = dao.getXXX();
}
public static void main(String[] args)  {
 Resource resource = new FileSystemResource("beans.xml");
 BeanFactory context = new XmlBeanFactory(resource);
 Demo demo = (Demo)context.getBean("Demo");
 demo.doXXX();
}
}当调用demo.doXXX()的时候,会报空指针异常,说dao是null, 
但是当我把private void doXXX() 改成 public void doXXX()时,再次执行,就正常运行了。哪位大神能告诉一下这是怎么回事啊?谢谢了我在main里面在调用doXXXX()之前先调用过getDao()方法,返回的不是null。
不用怀疑配置错了,因为改成public就ok了。

解决方案 »

  1.   

    private 声明的变量或方法,只能在内部调用  
      

  2.   

    这个我知道,但是调用getDao的时候已经赋值了,为什么那里就取不到呢
      

  3.   


    Demo demo = (Demo)context.getBean("Demo");
    demo.doXXX();你用Spring生成的Demo类的实例demo调用另一个Demo类的实例---调用main方法初始化的实例的doXXX()方法
    自然要求doXXX()方法不能是private的了  含main的入口类没必要用Spring初始化
      

  4.   

    你用Spring生成的Demo类的实例demo调用另一个Demo类的实例---调用main方法初始化的实例的doXXX()方法
    自然要求doXXX()方法不能是private的了 含main的入口类没必要用Spring初始化
      

  5.   


    在main里不用 spring生成Demo的实例,直接new一个出来吗,这样那个dao根本没地方被赋值。直接是null
      

  6.   

    public class Demo {
    private IUserDAO dao; public void setDao(IUserDAO dao) {
    this.dao = dao;
    } private void doSomeThing() {
    System.out.println(dao.toString());
    } public static void main(String[] args) {
    ApplicationContext ctx = new ClassPathXmlApplicationContext(
    "spring/ann/app.xml");
    Demo demo = ctx.getBean("demo", Demo.class);
    demo.doSomeThing();
    }
    }
    我跟你写的一样的吧。我为啥就没有你那个问题呢?
      

  7.   

    这个不是没有注入的问题,而是你的doXXX()方法是private的,不能在main方法里面调用,是不是这样啊
      

  8.   


    在配置里对Demo 配置了一个bean,叫demoBean,然后用org.springframework.transaction.interceptor.TransactionProxyFactoryBean对上面那个bean包了一下进行代理,配置了一些事物,bean叫Demo,然后main里面获取的这个代理bean,你应该是直接获取的bean吧
      

  9.   

    注解没有setDao怎么注入?你确定Demo注入到ioc中了。。
      

  10.   

    在配置里对Demo 配置了一个bean,叫demoBean,然后用org.springframework.transaction.interceptor.TransactionProxyFactoryBean对上面那个bean包了一下进行代理,配置了一些事物,bean叫Demo,然后main里面获取的这个代理bean
      

  11.   

    话说楼主你的demo也够蛋疼的啊,我是了试了一下可以啊。楼主注意把spring配置文件放在src下的话路径写 “src/applicationContext.xml”
    spring配置文件: <bean id="studentDao" class="org.corolla.dao.StudentDao"/>
    <bean id="deme" class="org.corolla.mysqltest.Deme">
    <property name="studentDao">
    <ref bean="studentDao"/>
    </property>
    </bean>
    //-------以下private void doxxx()
     private void doxxx(){
         studentDao.doDaoSomethind();
     }
    //-------以下main
     public static void main(String[] args){
      Resource resource = new FileSystemResource("src/applicationContext.xml");
      BeanFactory ctx = new XmlBeanFactory(resource);
      Deme deme = (Deme)ctx.getBean("deme");
      deme.doxxx();
      }