`
saaya
  • 浏览: 74600 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

转载:Spring 重点个人小结

阅读更多
原文:http://www.blogjava.net/beansoft/archive/2007/08/02/133892.html

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% 掌握是不现实的, 而且过了一阵子不用就肯定会忘, 所以现在需要的是了解概念, 能跑一些基础的代码以后用到的话再深入研究.

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


看来对spring真的很缺乏了解啊!!
spring的开放参考文档、
spring in action(现在出第二版了)的书多读读
annotation的用法也多了解一下!谢谢!

相关推荐

Global site tag (gtag.js) - Google Analytics