一
.
什么是Spring inner beans?
1 ) . 场景 : 在Spring框架中,无论何时bean被使用时,当仅被调用了一个属性,一个明智的做法是将这个bean声明为内部bean
2 ) . 优势 : 内部bean可以用setter注入"属性"和构造方法注入"构造参数"的方式来实现
3 ). 例子 : 在应用程序中,一个Customer类引用了一个Person类,我们的要做的是创建一个Person的实例,然后再Customer内部使用
public class Customer{
private Person person;
//setters and Getters
}
public class Person{
private String name;
private String address;
private int age;
//setters and Getters
}
4 ). 内部bean的声明方式如下 :
<bean id="CustomerBean" class="com.howtodoinjava.common.Customer">
<property name="person">
<!--this is inner bean-->
<bean class="com.bowtodoinjava.common.Person">
<property name="name" value="lokesh"/>
<property name="adress" value="India"/>
<property name="age" value="34"/>
</bean>
</property>
</bean>
二.
Spring框架中的单例Beans是线程安全的么?
1 ) . 须知 : Spring框架并没有对单例bean进行任何多线程的封装处理,关于单例bean的线程安全和并发问题需要开发者自行去搞定
2 ) . 事实 : 实际上,大部分的Spring bean并没有可变的状态(比如Serview 类和DAO类),因此在某种程度上说Spring的单例bean是线程安全的
3 ) . 其它 :
[1] 场景 : 若你的bean有多种状态的话(比如View Model对象) ,需要自行保证线程安全
[2] 方式 : 最浅显的解决办法是将多态bean的作用域由"singleton"变更为"prototype"