我有以下要求
我想通过spring配置文件将http:\\localhost:9080\testws.cls
值作为setter注入传递。我如何为TEST1_WSDL_LOCATION
public class test1
extends javax.xml.ws.Service
{
private final static URL TEST1_WSDL_LOCATION;
static {
URL url = null;
try {
url = new URL("http:\\localhost:9080\testws.cls");
} catch (MalformedURLException e) {
e.printStackTrace();
}
TEST1_WSDL_LOCATION = url;
}
public test1(URL wsdlLocation, QName serviceName) {
super(wsdlLocation, serviceName);
}
public test1() {
super(TEST1_WSDL_LOCATION, new QName("http://tempuri.org", "test1"));
}
/**
*
* @return
* returns test1Soap
*/
@WebEndpoint(name = "test1Soap")
public Code1Soap getTest1Soap() {
return (Test1Soap)super.getPort(new QName("http://tempuri.org", "Test1Soap"), Test1Soap.class);
}
}
请帮帮我。
答案 0 :(得分:4)
Spring无法从外部初始化静态最终字段。
这是不可能的。静态最终字段在类加载时初始化,早在Spring有机会做任何事情之前(并且无论如何都不能将参数传递给ClassLoader)。
你必须重新考虑你的设计。这不行!
答案 1 :(得分:1)
你可以在bean实例上设置一个setter。
Class WsdlCode{
private static URL WSDL_LOCATION;
public void setUrlString(String url) {
URL url = null;
try {
url = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
WSDL_LOCATION = url;
}
当然,直到所有bean都设置了属性之后,该字段才可用,但Spring有一些接口。例如InitializingBean
。
答案 2 :(得分:1)
@Component
public class UserUtils
{
private static UserAccessor userAccessor;
/**
* Sets the user DAO. This method should never be called except by Spring
* @param userAccessor The user accessor to set
*/
@Autowired(required = true)
public void setUserAccessor(userAccessor UserAccessor) {
UserUtils.userAccessor = userAccessor;
}
}
答案 3 :(得分:0)
正如有人已经提到的那样,Spring不会这样做。在Spring可能影响该值之前,将运行静态初始化程序。
你可能应该做的是将Spring中的Code1类实例化为bean并在那里设置值。如果值需要由bean的多个实例共享,那么在Spring中将值设为单例作用域。