我尝试从上下文文件初始化setter方法。但它没有按预期工作。
// setter方法
public class Service {
private long Id=0;
public long getId() {
return Id;
}
public void setId(long Id) {
this.Id = Id;
}
}
//调用方法
public class test {
//...source code
Service sercvi = new Service();
System.out.println("******************ID"+sercvi.getId());
..................................
}
context.xml中
..........................................
..........................................
<bean id="Service" class="com.test.Service.Service" >
<property name="Id" value="100"/>
</bean>
...........................................
..........................................
这里是在web.xml文件中加载上下文文件 的web.xml
...............................
....................
<!-- Spring load context.xml - -->
<context-param>
<param-name>contextLocation</param-name>
<param-value>/WEB-INF/Context.xml</param-value>
</context-param>
如果我运行应用程序,它总是为id返回0值,但我在context.xml中输入了100。 为什么不检索该值? 如何从上下文文件初始化setter方法值? 还有如何检索这些值?
如何解决此错误?
答案 0 :(得分:2)
正在手动创建您的Service
实例。 Spring
只会在Spring上下文处理bean时触发注入。
如何解决此错误?
不要手动初始化bean,使用Spring上下文或Spring注入来恢复它们。
您可以将bean注入另一个bean:
@Component
public class FooComponent {
@Autowired
Service service;
public void foo() {
System.out.println(service.getId()); //prints the value injected by Spring
}
}
或者直接从Spring上下文中恢复它
@Component
public class BarComponent {
@Autowired
BeanFactory beanFactory;
void bar() {
Service service = (Service)beanFactory.get("service");
System.out.println(service.getId()); //prints the value injected by Spring
}
}
还有另一个选项可让您手动创建bean并使用@Configurable
注释here中的所有Spring power 。
如果您想测试Spring bean,请使用JUnit + Spring Test,但这更多地用于集成测试而不是单元测试。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(location={"classpath:location/of/your/spring.xml"})
public class MySpringTest {
@Autowired
Service service;
@Test
public void fooTest() {
System.out.println(service.getId());
Assert.assertEquals(100, service.getId());
}
}