我是Spring Framework的新手。我在春天尝试了以下示例。
@Path("/XZY")
@Service
@Transactional
public class XZY {
@Autowired
SampleDAO sampleDao;
@Autowired
TestDAO testDao;
@Autowired
XZYinterface xzyinterface;
@POST
@Produces("text/plain")
@Path("/checkservice")
public Response XZYservice(@FormParam("Code") String Code,
@FormParam("source") String source,
@FormParam("value") String value) {
//return xzyinterface.checkXYZService(Code,sourceName,source);
XZYinterface xyz = ServiceFactory.getXZY(999);
return xyz.checkXYZService(Code,sourceName,source);
}
}
以下代码将用于创建单例对象
public class Singleton {
private static sampleA sampleClassA=null;
private static SampleB sampleClassB=null;
public static XZYAbstract getXZY(long id){
if(id == 999){
if(sampleClass == null){
sampleClassA = new sampleA();
}
return sampleClass;
}
if(id == 9999){
sampleClassB = new sampleA();
}
return sampleClassB;
}
}
界面
public interface XZYinterface {
Response XZYservice(String Code, String source,String value)
}
抽象类和实现接口
public class XZYAbstract implements XZYinterface {
public XZYAbstract(){
super();
}
@Autowired
SampleDAO sampleDao;
@Autowired
TestDAO testDao;
public Response checkXYZService(String Code,String source,String value){
String sample = sampleDao.getValue(code);
//..source code
}
}
以下类扩展了抽象类。
public class sampleA extends XZYAbstract {
//some methods.
}
如果我运行应用程序,则会抛出以下错误
SEVERE [com.sun.jersey.spi.container.ContainerResponse] The RuntimeException could not be mapped to a response, re-throwing to the HTTP container: java.lang.NullPointerException
at com.test.xyz.XZYAbstract.checkXYZService(XZYAbstract.java:112) [:]
at com.test.XYZ.XZYservice(XZY.java:140) [:]
如果我直接调用没有单例对象,则使用自动连线( // return xzyinterface.checkXYZService(Code,sourceName,source); )正确初始化值,并且它正常工作。 从单例对象抛出,值(sampleDAo,testDao)未正确初始化。
如何解决此错误?
答案 0 :(得分:1)
原因很简单:因为Spring只是一个库,而不是对Java语言的改变。 Spring不会检测也不会增强构造函数,因此获取初始化Spring bean的唯一方法是从Spring上下文中获取它。
如果你致电new Bean()
,你就会变成Bean实例不受Spring的影响。
关于如何使用singleton bean的问题:什么都不做。 Spring bean默认是单例。您可以通过@org.springframework.beans.factory.config.Scope
注释指定其他范围。请参阅示例@Scope("prototype") bean scope not creating new bean,它是如何工作的。