Spring IoC容器本质目的是为了管理Bean,对于Bean而言在容器中存在生命周期,它的初始化和销毁也需要一个过程,在一些需要自定义的过程中可以插入一些代码去改变一些它们的行为。
BeanFactory是Spring容器所定义的最底层的接口,
BeanFactory还能在实例化对象的时生成协作类之间的关系。此举将bean自身与bean客户端的配置中解放出来。
BeanFactory还包含了bean生命周期的控制,调用客户端的初始化方法(initialization methods)和销毁方法(destruction methods)。
ApplicationContext是BeanFactory的一个子接口,对BeanFactory功能进行了扩展,绝大部分场景下都会使用ApplicationContext作为Spring容器
ApplicationContext的常见实现:ClassPathXmlApplication、FileSystemXmlApplicationContext、XmlWebApplicationContext
<beans>
<context:annotation-config/>
</beans>
Spring框架并没有对 单例bean进行任何多线程的封装处理。关于单例bean的 线程安全和并发问题需要开发者自行去搞定。但实际上,大部分的Spring bean并没有可变的状态(比如Service类和DAO类);如果Service类中有全局变量例如SimpleDateFormat这种线程不安全的东西,就需要自行保证线程安全;或者将bean作用域改为prototype
使用接口的原因:
- AOP程序的思想,给别人调用的接口,调用这只想知道方法和功能,而对于这个方法内部逻辑实现并不关心。
- 降低各个模块间的关联,实现松耦合、程序分成、最主要的体现了继承只能单继承,接口却可以多实现
<beans>
<!-- Definition for javaCollection -->
<bean id="javaCollection" class="com.howtodoinjava.JavaCollection">
<!-- java.util.List -->
<property name="customList">
<list>
<value>INDIA</value>
<value>Pakistan</value>
</list>
</property>
<!-- java.util.Set -->
<property name="customSet">
<set>
<value>INDIA</value>
<value>Pakistan</value>
<value>USA</value>
<value>UK</value>
</set>
</property>
<!-- java.util.Map -->
<property name="customMap">
<map>
<entry key="1" value="INDIA"/>
<entry key="2" value="Pakistan"/>
<entry key="3" value="USA"/>
<entry key="4" value="UK"/>
</map>
</property>
<!-- java.util.Properties -->
<property name="customProperies">
<props>
<prop key="admin">admin@nospam.com</prop>
<prop key="support">support@nospam.com</prop>
</props>
</property>
</bean>
</beans>
原文:https://www.cnblogs.com/z-dk/p/14748668.html