BeanSoft's Java Blog
MyEclipse 6, Spring, Struts 2, Hibernate, JPA, WebLogic, AJAX, Netbeans 6

Spring 这么多内容该看哪些? 我就根据我的理解谈一些个人的观点, 仅供参考. 欢迎讨论.

首先学习 Spring 等框架应该本着简化程序员负担, 加快开发速度的原则来进行, 而不是把框架的知识点都给学习, 练习一遍. 另外用 Spring 的时候也要注意不要过渡依赖 Spring 框架, 注意它们的宣传语是: 无侵入, 轻量级. 所以, 除非必要, 千万不要让 Spring 侵入你的代码啊, 例如哪些 Aware 接口, 不也是变相的侵入了你的代码嘛. 还有不要为了 Spring 而 Spring, 明明一段代码用 new JavaBean().setUsername("xxx") 这样的方式非常简练, 你非要整出个 bean 的配置文件来, 纯属多此一举. 所以无侵入只是个相对概念, 代码写少了, 但是 bean.xml 配置文件和 Spring.jar 你不能丢吧, 所以你已经被 Spring 侵入了, 而且以后想换第二家公司来做个框架解析你这些 XML 文件都困难呢, 因为 Spring 本身并不是可替换或者热插拔的, 换句话说所有用 Spring 的代码都已经被绑定到了 Spring 框架上.  好了, 先说一下目前了解的 Spring 的主要应用场合.

1. 依赖注入, 主要是把一些需要经常修改的内容提取为 Bean, 也是尽量能不提取就不提取, 要不然到最后那个 bean.xml 增加到了几千行你也就不会觉得这时候有什么方便的地方了;

2. 整合 Hibernate, 这个可以说是最强大最实用的功能了, 也是为什么一提到 Spring 后面总是跟着 Hibernate 的原因. 在文档的 12.2. Hibernate 有相关的介绍. 例如看看下面的调用代码:

import java.io.IOException;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import dao.Testuser;
import dao.TestuserDAO;

// 调用 Hibernate DAO
public class Test {

 public static void main(String[] args) throws IOException {
  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  TestuserDAO dao =(TestuserDAO)context.getBean("userDAO");
  Testuser user = new Testuser();
//  user.setxxx..., 设置值.
  dao.save(user);
 }

}


再看 DAO 的代码:

package dao;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

/**
 * Data access object (DAO) for domain model class Testuser.
 */

public class TestuserDAO extends HibernateDaoSupport {


 public void save(Testuser transientInstance) {
  getHibernateTemplate().save(transientInstance);
 }

 public void delete(Testuser persistentInstance) {
  getHibernateTemplate().delete(persistentInstance);

 }

}

是不是感觉简单到令人难以置信?  要保存的实体 POJO 也很简单:
package dao;

/**
 * Testuser generated by MyEclipse Persistence Tools
 */

public class Testuser implements java.io.Serializable {

 // Fields

 private Integer id;

 private String username;

 private Integer age;
 
 getXXX();
 setXXX();
}

然后我们看主要的配置文件 applicationContext.xml 的内容:
<?xml version="1.0" encoding="UTF-8"?>
<beans
 xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

 <bean id="userDAO" class="dao.TestuserDAO">
  <property name="sessionFactory">
   <ref bean="hibernateSessionFactory" />
  </property>
 </bean>

 <bean id="hibernateSessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="configLocation"
   value="file:src/hibernate.cfg.xml">
  </property>
 </bean>

</beans>

大家可以看到 DAO 的  HibernateSessionFactory 完全是配置出来的, 不用我们写一行 Hibernate 初始化的代码, Spring 已经帮我们做好了一切. 完整的代码大家可以下载附件. 但是大家也请注意, 我们的代码这样做也是依赖了 Spring 的框架, 其实功能强大和不依赖具体的框架本身就是个谬论, 你不用(依赖)它的框架又怎么能用到它的强大的功能呢?

3. 使用 JDBCTemplate 简化普通的 JDBC 代码编写, 这个大家可以去看参考文档(官方的 Spring Framework 开发参考手册, 中英文均可) " 第 11 章 使用JDBC进行数据访问", 老师也介绍过了.

4. 整合 Struts, 也参考文档里的内容, 具体是 15.4. Struts., 让 Struts 的 Action 可以被注入内容.

5. AOP 功能, 我没用过, 只是听一些朋友介绍说他们用的有, 所以建议大家了解一下, 个人觉得挺难理解, 开发的时候也是完全依赖 Spring 的 API, 比较难做. AOP 是 Spring 后来加入的内容, 按照官方文档是"锦上添花的内容", 其实就是捆绑了自己的 AOP, 而 Spring 最核心的内容当属依赖注入功能.

6.  事务管理, 据说有一些人在用. 但是感觉开发起来挺费劲的, 不如 EJB 3 的标注来的简便. 不过你被绑在了 Spring 框架上, 一般就只好用它自己做的这些个功能了.

7. 其它的 Spring MVC 等内容, 都是可选项, 具体来说开发工具支持上并不如 Struts 来的那么直接好用.

至于 Spring 的缺点:
1. 不支持分布式访问,分布式事务和集群, 这些是 EJB 3 的优点, 但是 Spring 目前还不支持;
2. 配置使用 XML 文件, 如果文件内容很多的话对维护的人来说是个负担;
3. 提供 Spring 容器的只有一家公司(Interface21), 换句话说它是非标准的, 被个别公司垄断的技术, 不能像 EJB 那样可以换一家厂商的服务器, Spring 不存在第二家公司来做.

另外开发工具的支持上, MyEclipse 5 可以快速的 5 分钟就做好 Spring 整合 Hibernate 的框架代码. 如果大家有兴趣可以自己找点资料来看或者直接咨询我.

那么大家看了这篇文档希望能有一些自己的想法, 把内容 100% 掌握是不现实的, 而且过了一阵子不用就肯定会忘, 所以现在需要的是了解概念, 能跑一些基础的代码以后用到的话再深入研究.

posted on 2007-08-02 07:32 BeanSoft 阅读(2169) 评论(12)  编辑  收藏 所属分类: Spring
Comments
  • # re: Spring 重点个人小结
    Thomas
    Posted @ 2007-08-02 07:52
    呵呵,写得不错。  回复  更多评论   
  • # re: Spring 重点个人小结
    kay
    Posted @ 2007-08-02 09:31
    文章不错,但是粘贴了两遍!不过还是支持一下!  回复  更多评论   
  • # re: Spring 重点个人小结
    SXY
    Posted @ 2007-08-02 10:13
    IOC和AOP是Spring的核心,spring的事务管理也是spring最重要的功能之一  回复  更多评论   
  • # re: Spring 重点个人小结
    BeanSoft
    Posted @ 2007-08-02 12:01
    内容已更正. 至于什么是核心, 就要看你打算用框架的哪些部分了. 我个人一直主张不要为了框架而框架, 尽量少用框架.  回复  更多评论   
  • # re: Spring 重点个人小结
    ASA
    Posted @ 2007-08-02 18:04
    又提分布式事务、集群,你遇到的项目、以及你听说的项目,有几个?  回复  更多评论   
  • # re: Spring 重点个人小结
    BeanSoft
    Posted @ 2007-08-02 18:32
    那请问你们的项目又有多少是真正需要 AOP 和事务的呢?

    我们以前的公司, Synnex.com, 在线分销系统, 基于 Weblogic 集群, 20 台 Solaris 系统, 部分项目用到分布式事务.

    我不是恶意攻击 Spring, 我对为了框架而框架的都不赞成. 建议少部分人讨论技术的时候不要带着有色眼镜. 我做过看过写过的代码可以自认为不是一般的多.  回复  更多评论   
  • # re: Spring 重点个人小结
    loveSpring
    Posted @ 2007-08-02 21:11
    3. 提供 Spring 容器的只有一家公司(Interface21), 换句话说它是非标准的, 被个别公司垄断的技术, 不能像 EJB 那样可以换一家厂商的服务器, Spring 不存在第二家公司来做.

    --------------
    spring是开源项目,非哪家公司独有,你有能力可以自己修改。spring又非中间件,且兼容性非常好,一个很大的特点是非侵入性,你换十家厂商的服务器基本上也没关系。  回复  更多评论   
  • # re: Spring 重点个人小结
    BeanSoft
    Posted @ 2007-08-02 21:27
    请阅读 Spring 源码开头的注释:
    /*
    * Copyright 2002-2007 the original author or authors.
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
    * You may obtain a copy of the License at
    *
    * http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing, software
    * distributed under the License is distributed on an "AS IS" BASIS,
    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    * See the License for the specific language governing permissions and
    * limitations under the License.
    */
    英文不好的可以找个金山词霸翻译一下.

    Spring 是轻量级容器, 这个容器本身没有第二家公司来做, 也就是同样的 bean.xml 配置文件, 只有 Interface21 的那伙人在修改维护, 存在像 Struts 1 升级到 Struts 2 框架完全不兼容的风险. 既然大家都认为服务器是重量级容器, 但是重量级容器可以切换, 但是很明显这个轻量级容器目前来讲只有一家, 因为它没有标准化自己, 也没有别的公司做兼容 spring bean 配置文件的轻量级容器, 换句话说它是被单一公司垄断的, 不能无缝替换为另一个轻量级容器. 另外所谓的非侵入性又从何说起? 你能把 spring.jar 替换掉嘛? 你能整合 Hibernate 的时候不要依赖 Spring 的 ORM 包嘛? 你要用某框架, 你就得依赖于它的具体 API.  回复  更多评论   
  • # re: Spring 重点个人小结
    BeanSoft
    Posted @ 2007-08-02 21:33
    对于各种技术, 哪个我也不赞成, 哪个我也不反对. 我只是做一些推广而已. 欢迎各位分享更多实用的技术资料.  回复  更多评论   
  • # re: Spring 重点个人小结

    Posted @ 2007-08-16 17:03
    spring和服务器有关系??~~~~
    SPRING不是有源代码可以看的吗?
    最后
    ——————————————————————
    项目用框架不用框架主要取决于框架是否提高了效率  回复  更多评论   
  • # re: Spring 重点个人小结
    BeanSoft
    Posted @ 2007-08-16 21:43
    Linux 也有源码呢? 你怎么不去改进它呢? 有源码 != 免费公开给所有人, 还缺: 核心技术文档.  回复  更多评论   
  • # re: Spring 重点个人小结
    姜利阳
    Posted @ 2007-08-28 11:58
    不错!  回复  更多评论   

标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-08-02 11:58 编辑过
 
 
相关链接:
网站导航: