exploring spring

作者连续学习Spring Framework两天后进行总结。起初被IoC和AOP概念困扰,通过具体例子加强理解。介绍了JdbcTemplate概念及操作代码,阐述了IoC核心概念、组件及优势,还给出使用ApplicationContext的示例程序,此外Spring还提供MVC框架等功能。

连续看 spring framework 两天了,总算对 spring 有一点点的了解了,也算是有那么一点点的收获吧,写点东西,也算是对理解概念做一番总结吧,初看 spring 的时候总是被它的两个主要概念 IoC AOP 搞的晕头转向,于是先忽略这些抽象的概念,通过一些具体的例子来加强理解吧,看的是一本 Spring Guide 的电子书,好歹也是中文的,理解起来要快一点了。

一开始的时候是在搞 JdbcTemplate,这是一个很好理解的概念,但是程序怎么也调不通过,最后才发现,原来是对 spring 基础知识的缺乏而导致的,算了,直接跳过,进行后面的基础知识学习了。 JdbcTemplate 概念其实很好理解,提供了对 Jdbc 的一种封装,简化一些 Jdbc 操作的冗余代码,思路和 MS DotNet Enterprise Library 中的 Data Access Application Block 类似,在 XML 文件中配置数据库的连接信息,将数据库操作封装成一个类,可以进行返回 ResultSet 和仅仅操作而不返回记录的操作。

用一段代码来表示其不返回记录的操作方式:

JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.update("UPDATE user SET age = 10 WHERE id = 'erica'");

再用一段代码来表示其返回记录的方式:(使用的是PreparedStatement)

final List userList = new ArrayList();
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.query(

"SELECT name, sex, address FROM user WHERE age > 18",

new RowCallbackHandler() {

public void processRow(ResultSet rs) throws SQLException {

User user = new User();

user.setId(rs.getString("name"));

user.setSex(rs.getString("sex"));

user.setAddress(rs.getString("address"));

userList.add(product);

}

}

);

spring 的一个核心概念就是 IoC (Inversation of Control) Martin Fowler 成为 Dependency Injectionspring 的核心部分包含了一个 IoC 容器。说白了 IoC 就是由容器控制程序之间的关系,而非传统实现有程序操纵。控制反转就是将控制权由应用程序代码中转到了外部容器,控制权的转移即所谓的反转。在 spring 中,我们只需要写 Bean 的接口代码,具体子类的实现可以通过 XML 或者其它的配置实现,以后维护时只需要修改配置文件而不是修改源代码。这样我们就把很多原本在编译期完成的任务转移到运行期来进行,很大程度上的提高了程序的灵活性。spring 也是一个无侵入式的高扩展性框架,即无须代码中涉及 spring 的专有类,即可将其纳入 spring 进行管理,也就是说,当有一个更好的 IoC 容器出来时,不需付出太大的代价即可实现迁移,这在 EJB 这样的高侵入式框架中简直就是一个恶梦。

IoC 的核心组件是 Bean Factory,是一个针对多个 Bean 的管理容器,我们可以不用 new 来实例化即可使用一个对象。由于没有做太多深层次的研究,对这一概念理解还是很有限的。spirng framework 中,从 Bean Factory 扩展出了一个 ApplicationContext 的类,比 Bean Factory 提供了更为强大,但框架依赖的实现。

很多概念由于理解的很肤浅,还要继续理解下去:下面一段是我调试通过的一段程序,演示出如何使用ApplicationContext 的。

Action.java(接口)

package beantest;

public interface Action

{

public String execute(String str);

}

LowerAction.java

package beantest;

import org.springframework.context.*;

import org.springframework.context.support.*;

public class LowerAction implements Action {

private String message;

public String getMessage()

{

return message;

}

public void setMessage(String string)

{

message = string;

}

public String execute(String str)

{

return (getMessage()+str).toLowerCase();

}

}

UpperAction.java

package beantest;

public class UpperAction implements Action

{

private String message;

public String getMessage() {

return message;

}

public void setMessage(String string) {

message = string;

}

public String execute(String str) {

return (getMessage() + str).toUpperCase();

}

}

配置文件bean.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<description>Spring Quick Start</description>

<bean id="TheAction" class="beantest.LowerAction">

<property name="message">

<value>HeLLo </value>

</property>

</bean>

</beans>

使用 ApplicationContext 来操作他们

public static void main(String[] args)

{

System.out.println("Hello!");

try

{

ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml");

Action action = (Action) ctx.getBean("TheAction");

System.out.println(action.execute("Rod Johnson"));

}

catch(Exception e)

{

e.printStackTrace();

}

}

除此之外,spring framework 还提供了很多有用的东西,比如一个 MVC 框架,提供了持久层的封装,包括 Jdbc 封装和 ORM 的封装。当然还有很多好用的功能,正待发掘中。

参考资料:
Spring In Action (Manning)
Spring 开发指南

也欢迎有这方面兴趣的朋友来和我探讨了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值