用过spring很长一段时间了,中间有放掉了一段时间,现在重新阅读文档,寻找我所需要的。
首先说一下spring的DI或者IOC,先不要把它放到神坛上,它的通俗说法是:控制权从应用程序转移到了外部的容器中,这种控制权的转移就叫控制反转或者依赖注入。这个主要讲的就是应用程序和容器之间的关系。依赖注入的目的并不能为软件带来更多的功能,它主要是为了提升软件组件的重用概率,并未系统搭建一个灵活可扩展的平台。
spring框架核心的核心是两个类,名称是BeanWrapper和BeanFactory,这两个类从技术上说并不复杂,如果想深入了解spring,那么就一定要阅读它的源码。BeanWrapper是提供了一套通用的属性设定机制,是spring依赖注入的基础。BeanFactory负责创建和维护Bean实例。BeanWrapper使用了反射的机制来实现获取注入bean的类型,属性和方法。BeanFactory是生成Bean的工厂模式。
下面是一个bean注入的全部配置情况的样例:
<beans>
<description>This is a bean-configuration xml file</description>
<bean id="TheAction"
class="com.seacean.action.HelloAction"
singleton="true"
init-method="init"
destroy-method="cleanup"
depends-on="ActionManager">
<property name="message">
<value>Hello</value>
</property>
<property name="desc">
<null/>
</property>
<property name="dataSource">
<ref local="dataSource"/>
</property>
</bean>
<bean id="dataSource" class="DataSource">
<property name="jndiName">
<value>java/sample</value>
</property>
</bean>
</beans>
ApplicationContext
spring的引入就是在web.xml中引入spring的listerner就可以了。spring的ApplicationContext是用来保存配置信息的。
下面的语句是获取ApplicationContext的:
ApplicationContext ctx=new FileSystemXmlApplicationContext("bean.xml");
Bean bean=(Bean)ctx.getBean("Bean");
spring对数据持久层做出的贡献
这个可能是它最大的优点了。对J2EE程序来说,事务的处理一般有两种模式:
1.依赖特定事务资源的事务处理
这是应用开发中最常见的开发模式,就是通过特定资源提供的事务管理机制来管理事务。例如:JDBC
2. 依赖容器的参数化事务管理
mybatis与spring的整合,主要看一下spring的applicationContext.xml文件中的配置:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property
name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property
name="url" value="jdbc:mysql://localhost:3306/hlp?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull"></property>
<property
name="username" value="root"></property>
<property
name="password" value="1234"></property>
<property
name="maxActive" value="100"></property>
<property
name="maxIdle" value="30"></property>
<property
name="maxWait" value="500"></property>
<property
name="defaultAutoCommit" value="true"></property>
</bean>
<bean
id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property
name="configLocation" value="classpath:MyBatis-Configuration.xml"></property>
<property
name="dataSource" ref="dataSource"
/>
</bean>
Dao与Service接口如下所示:
<bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property
name="mapperInterface" value="com.mybatis.UserDao"></property>
<property
name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
<bean
id="userService" class="com.mybatis.UserServiceImpl">
<property
name="userDao" ref="userDao"></property>
</bean>