Spring中pojo管理的问题
java类中,类的属性(field)一般应定义为final,不可变的属性可以构造不可变的类,以增加类的简单性,特别,即使类中属性只有部分不可变,也可以减少对类中可变状态的管理,也就是effective java中提到的类设计原则“将类的属性全部定义为final的,除非它们是可变的”;
然而,在实际中,使用spring管理的java类(即bean),通常都定义为私有的,但是提供了setter(即可变的方法),这样的设计是基于什么样的理由?
仅仅是因为spring的cglib实现aop必须要setter以提供注入,还是由于spring内置了对类可变性的管理呢?
困惑了好几天,希望大神不吝赐教,感激不禁。
再次感谢。
发现了,可以使用构造器注入,似乎没有定义final主要是因为项目组中人员的设计问题?
附加追问,对于一个java类,它映射oracle数据库中的一张表,那么他的id为oracle中生成的序列,问题在于,该id应该是不可变的属性,即应该定义为final,则只能在静态初始化块或者构造器中初始化;
现在要将该类的一个实例作为一条记录插入表中,但是由于序列在插入时生成(使用了mybatis的selectKey),请问有没有良好的解决方案?在初始化该类实例前先查询生成序列,再构造?还是有更优的在插入时构造该id字段?