setter方法在Spring中不起作用?

时间:2014-05-09 05:31:49

标签: java spring

我尝试从上下文文件初始化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方法值? 还有如何检索这些值?

如何解决此错误?

1 个答案:

答案 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());
    }
}