public class Test {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
new ClassPathXmlApplicationContext("applicationContext.xml");
}
@Resource
ServerTimer serverTimer;
@org.junit.Test
public void main() {
Server_database sb=new Server_database();
sb.setAdministrator("11");
sb.setDatabase_versions("11");
sb.setDatabasename("dd");
sb.setIp("2222");
sb.setPassword("111");
serverTimer.save(sb);
}
}
--------------ServerTimer-------------
public interface ServerTimer{
public void save(Server_database sb);
}
---------------ServerTimerImpl-----------------
@Service
public class ServerTimerImpl implements ServerTimer{
@Resource Server_databaseDao server_databaseDao;
public void save(Server_database sb){
server_databaseDao.save(sb);
}
}
--------------------Server_databaseDao---------------
public interface Server_databaseDao extends BaseDao<Server_database> {
public Server_database findString(String string);
public List<Server_database> findA();
}
-----------------Server_databaseDaoImpl------------------
@Repository
public class Server_databaseDaoImpl extends BaseDaoImpl<Server_database>
implements Server_databaseDao {
public Server_database findString(String string) {
Server_database sd =  (Server_database) em.createQuery(
"from Server_database where ip_and_databasename='" + string
+ "'").getSingleResult();
return sd;
}
@SuppressWarnings("unchecked")
public List<Server_database> findA(){
return em.createQuery("select o from Server_database o").getResultList();
}
}
-----------------beans.xml------------------------
<?xml version="1.0" encoding="UTF-8"?>
<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:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <context:component-scan base-package="cn.yilin" />

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="yilin" />
</bean> <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="txManager" />
</beans>
-----------------------------------------------------做后就出现这样的错误
java.lang.NullPointerException
at cn.yilin.test.timer.Test.main(Test.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:66)
at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
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)试了好多方法,只有userTableDao = (UserTableDao) act.getBean("userTableDaoImpl");想这样的注入才好使,new和
@Resource都不行。这是怎么回事,那位朋友知道请回复,在这郁闷了好长时间。好像是EntityManager这个没创建出来,不过在别的地方还好使呢?

解决方案 »

  1.   

     看的真费劲啊,好像少了get set方法了。
      

  2.   

    或许是  注入需要set方法来支持的
      

  3.   

    在那加set get方法啊,我原来就没用就好使的
      

  4.   

    只要set方法就够了,不需要get也可以
      

  5.   

    serverTimer没有注入吧,没有在哪里看到你注入了
      

  6.   

    在basedao里的这个方法
    public void save(T o) {
    logger.debug("save" + o); logout("save---" + o);
    }
    就抛异常,像上面那样测试的时候有时只到at cn.yilin.test.timer.Test.main(Test.java:30)
    就结束了。
    我想知道为什么jpa的事务管理器的方法抛null异样,应该是事务管理器没有实例化。但是new ClassPathXmlApplicationContext("applicationContext.xml");
    了,在别的里面都好使,这是怎么回事,不是测试类不能有注解吧
      

  7.   

    上的是em.persist(o);调红色给弄没了
      

  8.   

    用System.out.println(dao)测试下就知道有没有注入了,没注入DAO到Dao这地好象不会报错
      

  9.   

    @Resource(name = "xxxxx")换成这样呢?xxxxx地方时beanid
      

  10.   

    spring集成测试用例使用的注入使用@Autowired 不是使用@Resource
      

  11.   

    终于在网上+测试出结果了
    我知道为什么EntityManager为null了,是spring没有把bean注入给普通java类。
    谢谢大家捧场
      

  12.   

    Spring Set注入需要加入set方法 get可以不用