Java Spring上下文中的实用程序应该是静态的还是注入的?
我正在编写一些utlility方法,帮助为webservice请求构建复杂的对象结构 使用Java Spring上下文中的实用程序应该是静态的还是注入的?,java,spring,web-services,utility,Java,Spring,Web Services,Utility,我正在编写一些utlility方法,帮助为webservice请求构建复杂的对象结构 使用Spring时:最好将这些类作为静态实用程序提供,还是将它们注入/自动连接 例如: //the service used to build different parts for the webservice request class RequestService { public addCurrency(Req req) { //create currency xml objec
Spring
时:最好将这些类作为静态实用程序提供,还是将它们注入/自动连接
例如:
//the service used to build different parts for the webservice request
class RequestService {
public addCurrency(Req req) {
//create currency xml object
req.addCurrency(cur);
}
public addPassengers(Req req, List<String> names) {
for (String name : names) {
req.getPassengers().add(passenger);
//create passengers
}
}
}
class WebserviceClient {
void runWithStatic() {
Req req = new Req();
RequestService.addCurrency(req, ..);
RequestService.addPassengers(req, ..);
send(req);
}
//or
@Autowired
private RequestService reqService;
void runWithInjected() {
Req req = new Req();
reqService.addCurrency(req, ..);
reqService.addPassengers(req, ..);
send(req);
}
}
//用于为webservice请求构建不同部分的服务
类请求服务{
公共地址货币(Req){
//创建货币xml对象
请求添加货币(当前);
}
公共添加乘客(请求、列表名称){
for(字符串名称:名称){
请求获取乘客().添加(乘客);
//创造乘客
}
}
}
类WebserviceClient{
void runWithStatic(){
Req Req=新的Req();
RequestService.addCurrency(请求,…);
请求服务。添加乘客(请求,…);
发送(请求);
}
//或
@自动连线
私有请求服务请求服务;
void runWithInjected(){
Req Req=新的Req();
请求服务。添加货币(请求,…);
请求服务。添加乘客(请求,…);
发送(请求);
}
}
从总体spring设计的角度来看,是否有一种方法更可取?我更倾向于接口和注入-这允许您在以后的某个时候更改服务的实现。它还允许您在测试期间进行模拟。以那种方式使用
静态方法是邪恶的——它使任何类型的测试都成为一场噩梦。总是过度设计一切。许多人认为,在Java中,这种方法是不会出错的。说真的,为什么要注入依赖项,比如static boolean equal(Object,Object)
或logerror(String message)
或任何数量的此类小型实用方法?正如您在上面所读到的,我们并不是在讨论等式/日志记录方法……难道RequestService
不应该是RequestFactory
并且也应该负责构建Req
对象吗?这就是您没有硬编码的Req
构造函数。