<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>O!Hacker Blog &#187; spring</title>
	<atom:link href="http://ohacker.com/tag/spring/feed/" rel="self" type="application/rss+xml" />
	<link>http://ohacker.com</link>
	<description>anything to hack</description>
	<lastBuildDate>Thu, 12 Aug 2010 05:17:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Why is Spring So Important?</title>
		<link>http://ohacker.com/2009/07/28/why-is-spring-so-important/</link>
		<comments>http://ohacker.com/2009/07/28/why-is-spring-so-important/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 17:20:23 +0000</pubDate>
		<dc:creator>Tony</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://localhost/blog/?p=43</guid>
		<description><![CDATA[        Java EE 平台主要希望解决复杂的分布式的应用程序的开发，在中间件厂商与开源社区的大力支持下，传统的JavaEE架构在标准的low-level 中间件服务平台之上，通过一系列的APIs（EJB，JTA，JMS）也可以成功的开发。由于这些陈旧的JavaEE项目首要关注点都在标准化服务上，而忽略了开发的简单性原则。所以基于JavaEE平台的项目往往投入巨大。          Java EE平台目标是用来开发基于模块的应用。而模块是指一个单独的程序，一段可以在复杂项目中简单重用的代码。例如：一个order模块包含一个用来持久化的 entity bean，一个用来处理业务流程的的session bean，理论上，这样的模块在很大程度上是可以重用的，但是，现实中，这些模块往往使用率不高。Java EE 程序的复杂性主要表现在编写model的时候，开发java EE model 往往需要写很多不必要的重复的代码和测试。这其中至少包括一段典型的在JBDI tree上查阅EJB对象的代码，获得一个数据库链接，拼装并执行数据库查询，并且最终释放数据库资源。首先，这样的程序极大地破坏了OO的封装原则，而且无谓的浪费了大量的程序员的人力。EJBs 的设计初衷是解决分布性事物的，虽然大部分的JavaEE项目包含数据库操作，进而需要一些事物操作，但是这些项目不需要分布性事物。但是一旦使用了 EJBs，项目中就引入了大量的用语处理分布性事务的代码。而且这个本来不需要分布性的项目也就成了一个分布性应用，由于有分布性的特性（虽然没用到），所以也对部署和硬件提出了更高的要求。而且由于基于EJBs的程序对JavaEE容器有比较大的依赖，所以Unit Test也变得很困难。所以TDD基本变得不可能。           由于JavaEE开发的复杂性。Java社区提出了许多新的框架来代替传统的 JavaEE架构。其中Struts是一个基于servlet API的MVC实现。Hibernate解决了entity bean的痛苦旅程，它提供了一个基于POJOs的持久化框架，由于POJO不是一个分部式的对象，所以和entity bean相比，它有着更加出色的性能。而且Hibernate不依赖任何容器，所以单元测试也就变得很容易了。           不同于Struts与 Hibernate，Spring Framework 并不是为了提供单独某一层的框架。他实际上提供了一种跨曾的框架支持，在分层的应用体系中，它帮助各层的独特框架更好的交互，而有不用意识到其他层的存在，由于Spring提供一个简单的基于POJOs，并且脱离JavaEE容器的开发环境，所以单元测试也就更加容易了。 相关日志Spring包结构以及各个包之间引用关系说明Spring Annotation(IOC篇)Spring Annotation(AOP篇)JRuby On Spring在spring框架中使用Jruby]]></description>
		<wfw:commentRss>http://ohacker.com/2009/07/28/why-is-spring-so-important/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring包结构以及各个包之间引用关系说明</title>
		<link>http://ohacker.com/2009/07/28/spring%e5%8c%85%e7%bb%93%e6%9e%84%e4%bb%a5%e5%8f%8a%e5%90%84%e4%b8%aa%e5%8c%85%e4%b9%8b%e9%97%b4%e5%bc%95%e7%94%a8%e5%85%b3%e7%b3%bb%e8%af%b4%e6%98%8e/</link>
		<comments>http://ohacker.com/2009/07/28/spring%e5%8c%85%e7%bb%93%e6%9e%84%e4%bb%a5%e5%8f%8a%e5%90%84%e4%b8%aa%e5%8c%85%e4%b9%8b%e9%97%b4%e5%bc%95%e7%94%a8%e5%85%b3%e7%b3%bb%e8%af%b4%e6%98%8e/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 17:18:12 +0000</pubDate>
		<dc:creator>Tony</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://localhost/blog/?p=41</guid>
		<description><![CDATA[Spring 包结构说明： spring.jar 包含有完整发布的单个jar包。他包含有除spring-mock.jar之外的所有 jar。原因是，spring-mock.jar只有在开发环境中才会用到，而且仅仅是作为一个辅助测试类存在。除了spring.jar，spring 还包括13个独立的jar文件，他们各自包含这spring各自的组件。所以，如果你可以明确知道使用spring的哪些资源文件时，就没必要去直接引入 spring.jar，但有时候spring.jar的引入也是最偷懒和最直接的方式。 spring-core.jar 这个jar包含spring框架基本的核心工具类，spring其他组件都要使用到这个包里的类。是其他组件的基本核心。 spring-beans.jar 这个jar是所有应用都要用到的，他包含访问配置文件，创建和管理bean以及进行Inversion of Control / Dependency Injection（IoC/DI）操作相关的所有类如果应用只需基本的IoC/DI支持，引入spring-core.jar和spring- beans.jar就已经足够了。 spring-aop.jar 包含一些使用ＡＯＰ特性时需要用到的一些类。在使用spring 的AOP特性如Declarative Transaction Management（事务管理）就需要用到这个jar文件。 spring-context.jar 这个jar文件为spring提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类。JNDI所需的全部类，用来跟模板引擎集成（Velocity，FreeMarker，JasperReports）的类，以及校验相关类。 spring-dao.jar 包含Spring DAO、Spring Transaction进行数据访问的所有类，为了使用声明性事务支持还需要在自己的应用里包含spring-aop.jar spring-hibernate.jar 是对Hibernate支持的所有类。 spring-orm.jar 该jar对spring DAO特性集合进行了扩展，使其支持iBATIS、JDOOJB、TopLink，由于spring将hibernate独立成包了，因此在这里没有在支持hibernate。这个文件里大部分的类都依赖spring-dao.jar中的类。 spring-remoting.jar 这个包提供对EJB、JMS以及远程调用（RMIHessianBurlapHttp Invoker JAX-RPC）相关的类 spring-support.jar 该组件提供对Cache（ehcache）、JCA、JMX，邮件服务（Java Mail、COS Mail），计划任务Scheduling（Timer、Quartz）支持的类 spring-web.jar 如果web开发中开发，而且用到用到spring框架，那就应该引入这个包，该组件包括WebApplicationContext特性的类、struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 spring-webmvc.jar 该组件包含Spring MVC框架相关的所有类，包含国际化、标签、Theme、视图展现的FreeMarker、JasperReports、Tiles、Velocity、XSLT相关类。如果使用了独立的MVC框架则该组件不再需要。 spring-mock.jar 这个文件中包含Spring一整套mock类来辅助应用的测试。spring测试套件使用了大量的mock类，这样测试就更加简单了。由于可以对HttpServletRequest和HttpServletResponse进行模拟，使得对web进行单元测试更加方便。 包间引用关系： Spring中各个包引入之前都需要保证引入 commons-logging.jar spring-core.jar需 commons-collections.jar，spring-core.jar 是以下其他各个组件的基础。 [...]]]></description>
		<wfw:commentRss>http://ohacker.com/2009/07/28/spring%e5%8c%85%e7%bb%93%e6%9e%84%e4%bb%a5%e5%8f%8a%e5%90%84%e4%b8%aa%e5%8c%85%e4%b9%8b%e9%97%b4%e5%bc%95%e7%94%a8%e5%85%b3%e7%b3%bb%e8%af%b4%e6%98%8e/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring Annotation(IOC篇)</title>
		<link>http://ohacker.com/2009/07/28/spring-annotationioc%e7%af%87/</link>
		<comments>http://ohacker.com/2009/07/28/spring-annotationioc%e7%af%87/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 17:07:22 +0000</pubDate>
		<dc:creator>Tony</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[annotation]]></category>
		<category><![CDATA[aop]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://localhost/blog/?p=30</guid>
		<description><![CDATA[首先在application_context的xml配置文件中加入 &#60;context:component-scan base-package=&#34;org.bean&#34;/&#62; 而且保证xml的schema中包括context名称空间。 @Component //例如 @Component&#40;&#34;member&#34;&#41; public class Member &#123; private String id; &#125; 这个Annotation主要用来定义bean。 @Service,@Controller,@Repository 这3个目前与@component同意，以后版本会细化。 @Autowired //例如 @Component&#40;&#34;member&#34;&#41; public class Member &#123; private String id; @Autowired private Project project; &#125; 这个Annotation主要用来自动查找context，并且关联其中的bean。 @Qualifier @Component&#40;&#34;member&#34;&#41; public class Member &#123; private String id; private String name; @Autowired @Qualifier&#40;&#34;project&#34;&#41; private Project project; &#125; 这个Annotation主要用来自动关联时的微调 @Scope @Scope&#40;&#34;singleton&#34;&#41; [...]]]></description>
		<wfw:commentRss>http://ohacker.com/2009/07/28/spring-annotationioc%e7%af%87/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring Annotation(AOP篇)</title>
		<link>http://ohacker.com/2009/07/28/spring-annotation/</link>
		<comments>http://ohacker.com/2009/07/28/spring-annotation/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 16:59:24 +0000</pubDate>
		<dc:creator>Tony</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[annotation]]></category>
		<category><![CDATA[ioc]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://localhost/blog/?p=24</guid>
		<description><![CDATA[本文主要简单了解一下使用Java annotation的情况下，先介绍一下比较主流和简单的用法，Spring对AspectJ的支持。在ApplicationContext中加入关于AOP的命名空间，具体内容见Spring 使用AspectJ来配置AOP.首先明确一点，用作通知（Advice）的类也应该受到ApplicationContext的管理，之后再使用AspectJ的标签来管理通知动作，见代码： //import ... @Component @Aspect public class Alert &#123; @Before&#40;&#34;execution(* get*(..))&#34;&#41;//方法运行前通知 public void show&#40;&#41; &#123; System.out.println&#40;&#34;before&#34;&#41;; &#125; @After&#40;&#34;execution(* get*(..))&#34;&#41;//最终通知 public void show2&#40;&#41; &#123; System.out.println&#40;&#34;after&#34;&#41;; &#125; @Pointcut&#40;&#34;execution(* get*(..))&#34;&#41; public void afterReturn&#40;&#41;&#123;&#125; //方法返回值通知，注意这个通知需要与@Pointcut配合使用 @AfterReturning&#40;pointcut=&#34;afterReturn()&#34;,returning=&#34;value&#34;&#41; public void returning&#40;Object value&#41;&#123; System.out.println&#40;&#34;returning&#34;&#41;; &#125; @AfterThrowing&#40;pointcut=&#34;afterReturn()&#34;,throwing=&#34;ex&#34;&#41; //异常通知，这个通知复用了afterReturn的pointcut。当然你也可以使用新的pointcut public void doRecoveryActions&#40;Exception ex&#41;&#123; //... &#125; @Around&#40;&#34;afterReturn()&#34;&#41; //环绕通知。真正的方法实际上是joinPoint.proceed(); public Object doSomeForAround&#40;ProceedingJoinPoint joinPoint&#41; throws [...]]]></description>
		<wfw:commentRss>http://ohacker.com/2009/07/28/spring-annotation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JRuby On Spring在spring框架中使用Jruby</title>
		<link>http://ohacker.com/2009/04/23/jruby-on-spring%e5%9c%a8spring%e6%a1%86%e6%9e%b6%e4%b8%ad%e4%bd%bf%e7%94%a8jruby/</link>
		<comments>http://ohacker.com/2009/04/23/jruby-on-spring%e5%9c%a8spring%e6%a1%86%e6%9e%b6%e4%b8%ad%e4%bd%bf%e7%94%a8jruby/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 05:14:00 +0000</pubDate>
		<dc:creator>Tony</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Jruby]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://ohacker.com/2009/04/23/jruby-on-spring%e5%9c%a8spring%e6%a1%86%e6%9e%b6%e4%b8%ad%e4%bd%bf%e7%94%a8jruby/</guid>
		<description><![CDATA[昨天尝试在Spring中使用脚本语言，比如jruby，发现非常不方便，最主要的一点就是ruby class必须继承某一个java的接口，而其他bean调用时也是调用这个接口类型的对象。jruby的动态性基本丧失了。唉！ 相关日志JRuby的性能优化(update)Why is Spring So Important?Spring包结构以及各个包之间引用关系说明Spring Annotation(IOC篇)Spring Annotation(AOP篇)Ruby:Timezone synchronization function(跨时区同步时间方法)Ruby:string to date Or date to string用ruby写的一个网络爬虫程序Ruby 递归删除文件目录Ruby on Rails单元测试(Unit Test)]]></description>
		<wfw:commentRss>http://ohacker.com/2009/04/23/jruby-on-spring%e5%9c%a8spring%e6%a1%86%e6%9e%b6%e4%b8%ad%e4%bd%bf%e7%94%a8jruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
