下面的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....
}
}
答案 0 :(得分:3)
这里要问的主要问题是
什么是无状态对象?
答案是,如果Object的属性在其生命周期内没有发生变化,那么它就是无状态的。我假设你的bean的范围是singleton
,因此,只要values
属性在bean的生命周期内没有改变,它就是无状态的。否则不是。
答案 1 :(得分:0)
如果没有对values
数组的写访问权,则它是无状态的。否则,您可能会遇到错误。
答案 2 :(得分:0)
如果在初始化之后没有修改属性(或bean引用的对象的属性),则bean是有效的无状态。无论你使用何种类型。
因此,如果你不修改数组或其中一个项目,那么bean就是有效的无状态/有效不可变的。