这个Spring bean是无国籍的吗?

时间:2013-03-07 10:22:12

标签: spring

下面的bean是无状态的,因此是线程安全的吗?更具体地说,我的consern是String数组的注入值。这是否会干扰bean的状态?对不对?

public class ServiceImpl implements Service {

private static final Logger LOG = Logger.getLogger(ServiceImpl.class);

/* Injected values properties file. */
private String[] values;

@Autowired
private DAO dao;


@Transactional
@Override
public void invoke(String submissionId) {

    dosomething....
}
}

3 个答案:

答案 0 :(得分:3)

这里要问的主要问题是

  

什么是无状态对象?

答案是,如果Object的属性在其生命周期内没有发生变化,那么它就是无状态的。我假设你的bean的范围是singleton,因此,只要values属性在bean的生命周期内没有改变,它就是无状态的。否则不是。

答案 1 :(得分:0)

如果没有对values数组的写访问权,则它是无状态的。否则,您可能会遇到错误。

答案 2 :(得分:0)

如果在初始化之后没有修改属性(或bean引用的对象的属性),则bean是有效的无状态。无论你使用何种类型。

因此,如果你不修改数组或其中一个项目,那么bean就是有效的无状态/有效不可变的。