Spring是一个从实际项目开发经验中抽取的可高度重用的应用框架。
主要思想:控制反转IOC和依赖注入DI
控制反转:就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控,控制权有应用代码转到了外部容器,控制权的转移,即所谓的反转。
依赖注入的目标并非为软件系统带来更多的功能,而是为提升组件的重用概率,并为系统搭建一个灵活地、可扩展的平台。
<beans> <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>java:comp/env/jdbc/sample</value> </property> </bean> <bean id="sampleDAO" class="com.hammer.dao.SpringDAO"> <property name="dataSource"><ref local="dataSource"><property> </bean> <beans>
其中sampleDAO中的dataSource将由容器在运行期动态注入,而DataSource的具体配置和初始化工作将由容器在运行期完成。
对比传统的方式(通过编码初始化DataSource实例),我们可以看到,基于依赖注入的系统实现是相当灵活简洁的,sampleDAO只需要利用容器注入的DataSource实例,完成自身的业务逻辑,而不用关心具体的资源来自何处、由谁实现。
类似于 原来是部署在webLogic中,在运行期,通过JNDI从容器中获得DataSource实例。假设部署的环境发生了变化,系统需要脱离应用服务器独立运行,这样,由于失去了容器的支持,原本通过JNDI获取的DataSource的方式失效,我们只需要简单修改dataSource的配置:
<beans> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="name"><value>org.git.mm.mysql.Driver</value></property> <property name="url"><value>jdbc:mysql://localhost/sample</value></property> <property name="username"><value>root</value></property> <property name="password"><value>root</value></property> </bean> <bean id="sampleDAO" class="com.hammer.springDAO"> <property name="dataSource" ref="dataSource"></property> </bean> </beans>