三层架构: 
Dao层:package com.shhelian.app.dao;
import java.util.List;public interface MasterDao {
public List find(String hql);}
Impl:
package com.shhelian.app.dao.impl;
import java.util.List;
import javax.persistence.Entity;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Component;
import com.shhelian.app.dao.MasterDao;@Entity
@Component("MasterDao")
public class MasterDaoImpl extends HibernateDaoSupport implements MasterDao { @Override
public List find(String hql) {
return super.getHibernateTemplate().find(hql);
}

@Autowired
    public void overSessionFactory(SessionFactory sessionFactory) {
        super.setSessionFactory(sessionFactory);
    }}
server层:
package com.shhelian.app.service;import java.util.List;public interface MasterServer {
public List getAll();}
Impl:
package com.shhelian.app.service.impl;import java.util.List;import javax.persistence.Entity;import org.springframework.stereotype.Component;import com.shhelian.app.dao.MasterDao;
import com.shhelian.app.service.MasterServer;@Entity
@Component("MasterService")
public class MasterServerImpl implements MasterServer { public MasterDao mdao;

@Override
public List getAll() {
System.out.println("xxxxxxxxx");
return this.mdao.find("from Form_Account_Master");

} public void setMdao(MasterDao mdao) {
this.mdao = mdao;
}

}
这是我写的一个测试类 。 查询Form_Account_master表中的数据的size 
package com.shhelian.app.util;import java.util.List;import com.shhelian.app.model.FormAccountMaster;
import com.shhelian.app.service.impl.MasterServerImpl;public class Test {

private static CustomerContextHolder ch;
private static DataSourceMap dp;

public static void main(String[] args) {
ch.setCustomerType(dp.yxh); //设置数据源
MasterServerImpl mp = new MasterServerImpl(); 
List list = mp.getAll();
System.out.println(list.size());
}
}报空指针的错误 ,代码很简单  可是错误我找了好久都没有找到,求大神帮忙 。   还有我Spring配置文件里配置的是两个数据源:分别是Mysql和Sqlserver  项目部署的时候没有任何问题。  下面是错误提示:
xxxxxxxxx                 ---  这里是我上面代码中输出的
Exception in thread "main" java.lang.NullPointerException
at com.shhelian.app.service.impl.MasterServerImpl.getAll(MasterServerImpl.java:21)
at com.shhelian.app.util.Test.main(Test.java:16)

解决方案 »

  1.   

    必须报错,你new出来有啥用?你东西给spring管理了,要那出来也必须通过spring的get
      

  2.   

    return this.mdao.find("from Form_Account_Master");你调试一下,看看是不是上面这句报的空指针应该是this.mdao为空应该是你这个测试类有问题,一般做测试都会用junit,当运行测试方法的时候会加载配置文件你的这个应该是根本就没加载配置文件,根本就不能连接到数据库
      

  3.   

    测试类要这样写:package com.honglin.test;import java.util.List;import net.sf.json.JSONArray;import org.junit.Before;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;import com.honglin.dao.HrDepartmentDao;
    import com.honglin.dao.HrPostDao;
    import com.honglin.dao.HrStaffDao;
    import com.honglin.dao.impl.HrDepartmentDaoImpl;
    import com.honglin.dao.impl.HrFunctionDaoImpl;
    import com.honglin.dao.impl.HrPostDaoImpl;
    import com.honglin.dao.impl.HrStaffDaoImpl;
    import com.honglin.domain.HrDepartment;
    import com.honglin.domain.HrFunction;
    import com.honglin.domain.HrPost;public class Function {
    private ApplicationContext ctx;
    private 你的DAO

    @Before
    public void init() {
    ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    你的DAO = ctx.getBean("你的DAO注解的名字", DAO的类名.class);
    } @Test
    public void HrFunctionFindAll() {
    你的DAO .要测试的方法
    }
    }
      

  4.   

     确实是那句报的空指针 , 刚才做了一下单元测试,又报新的错误: 下面是单元测试报的错误:
    java.lang.SecurityException: class "junit.framework.JUnit4TestCaseFacade"'s signer information does not match signer information of other classes in the same package
    at java.lang.ClassLoader.checkCerts(ClassLoader.java:776)
    at java.lang.ClassLoader.preDefineClass(ClassLoader.java:488)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    at org.junit.internal.runners.OldTestClassRunner$OldTestClassAdaptingListener.asDescription(OldTestClassRunner.java:41)
    at org.junit.internal.runners.OldTestClassRunner$OldTestClassAdaptingListener.startTest(OldTestClassRunner.java:31)
    at junit.framework.TestResult.startTest(TestResult.java:151)
    at junit.framework.TestResult.run(TestResult.java:103)
    at junit.framework.TestCase.run(TestCase.java:118)
    at junit.framework.TestSuite.runTest(TestSuite.java:208)
    at junit.framework.TestSuite.run(TestSuite.java:203)
    at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:76)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
    说什么:签名者的信息不匹配签名者在同一个包中其他类的信息  搞不明白这句话是什么意思
      

  5.   


    用了单元测试了 但是用单元测试一测试就报:  
    java.lang.SecurityException: class "junit.framework.JUnit4TestCaseFacade"'s signer information does not match signer information of other classes in the same package
    at java.lang.ClassLoader.checkCerts(ClassLoader.java:776)
    at java.lang.ClassLoader.preDefineClass(ClassLoader.java:488)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    at org.junit.internal.runners.OldTestClassRunner$OldTestClassAdaptingListener.asDescription(OldTestClassRunner.java:41)
    at org.junit.internal.runners.OldTestClassRunner$OldTestClassAdaptingListener.startTest(OldTestClassRunner.java:31)
    at junit.framework.TestResult.startTest(TestResult.java:151)
    at junit.framework.TestResult.run(TestResult.java:103)
    at junit.framework.TestCase.run(TestCase.java:118)
    at junit.framework.TestSuite.runTest(TestSuite.java:208)
    at junit.framework.TestSuite.run(TestSuite.java:203)
    at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:76)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)