我正在使用Java7和Spring3。我有以下类(class)。
Request.java
public interface Request {
public void doProcess();
}
RequestImpl.java
@Transactional
public class RequestImpl implements Request{
private String name;
private String age;
//setters and getters
public void doProcess(){
//use name and age and call third party class which will save data into database
}
}
SpringConfig.xml
<bean id="request" class="pkg.RequestImpl.java" />
现在客户端将使用RequestImpl,如下所示。
RequestImplreq = (RequestImpl)applicationContext.getBean("request");
req.setName("someName");
req.setAge("20");
req.doProcess();
现在我的问题是我需要将上面的 RequestImpl.java 范围声明为原型(prototype)还是单例?
谢谢!
最佳答案
恕我直言,您工作得不好:进程和要处理的数据应该分开( Can DTOs be spring managed beans? ),因此 doProcess()
应定义为 doProcess(name,age)
或在工厂或类似物体后面的阴影。
也许最好的选择是定义
public interface Request {
public void doProcess(String name,String age);
}
@Transactional
public class RequestImpl implements Request{
public void doProcess(String name,String age){
// do what you want
}
}
您的 SpringConfig.xml 保持不变,调用代码将更改为:
Request req= applicationContext.getBean(Request.class);
req.doProcess("someName", "20");
除此之外,执行 ApplicationContext.getBean()
并将结果转换为实现(通常)是不好的做法,因为 Spring 可以代理返回的对象,并且转换为实现将失败并出现 ClassCastException
关于java - Spring bean配置使用单例还是原型(prototype)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21845969/