什么是Spring?有什么作用?具体体现?
什么是Spring?Spring是一个容器,可以接管各个层次的Bean(action/domain/pojo/javabean),并且可以配置bean与bean之间的关系。
有什么作用?spring的最终目的是为了简化java开发。
具体体现?举个例子:
我们使用传统的jdbc连接数据库,代码如下:(不知道还有几个人还记得jdbc连接数据库步骤?)
//加载驱动
Class.forName("...");
//提供数据库连接地址
String url = ...;
//获取连接
Connection conn = DriverManager.getConnection(url,user,password);
//创建statement对象
Statement stmt = conn.createStatement();
//执行查询操作
ResultSet rs= stmt.executeQuery(sql);
//获取查询结果
while(rs.next())
{
....
}
//关闭连接
conn.close();
toStat.close();
当我要查询A表时,需要执行上面的代码去获取A表查询结果。如果我需要去查询B表时,同样需要执行上面的代码去获取查询结果。
而Spring提供了连接数据库的模板,只需要在配置文件中配置数据库连接后,可通过模板来执行查询操作。如下:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close" dependency-check="none">
<property name="driverClass">
<value>${jdbc.driverClassName}</value>
</property>
<!--链接数据库的url -->
<property name="jdbcUrl">
<value>${jdbc.url}</value>
</property>
<!--链接数据库用户名 -->
<property name="user">
<value>${jdbc.username}</value>
</property>
<!--链接数据库密码 -->
<property name="password">
<value>${jdbc.password}</value>
</property>
</bean>
<!-- 配置数据模板 -->本次使用hibernate模板
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.OracleDialect
</prop>
</property>
</bean>
我们只需要在spring配置文件中配置数据库及使用模板后,就可以通过继承相应模板的抽象类实现数据库的相关操作。如下:
public class BaseDao extends HibernateDaoSupport
{
public void save(Object entity) {
//调用hibernate模板相关方法操作
super.getHibernateTemplate().save(entity);
super.getHibernateTemplate().flush();
super.getHibernateTemplate().clear();
}
}
上面的代码我使用了spring提供的hiberate模板。当然,spring还提供如jdbc,mybatis等等模板。
通过上面的示例可以看出,通过spring提供的数据库模板,我们再也不用去写大量的连接数据库模板,同时还得去创建,关闭各种连接(当然你也可以不关闭连接,只需要担心你的数据库资源是否够你挥霍而已 ——)。我们只需调用spring模板的相对应方法,就可实现对数据库的操作,而且不用担心资源的释放问题。相应代码量也少了,更利于代码的维护。
上面对数据库的操作只是一方面。
spring具体从以下几个方面来具体实现对java开发的简化:
1.基于POJO的轻量级和最小侵入性编程。
2.通过依赖注入和面向接口编程实现松耦合。
3.通过面向切面和惯例进行声明式编程。
4.通过面向切面和模板减少样板式代码。