包含标签 spring 的文章

第一次给Spring-Framework贡献代码

鲁肃说建议去看Spring框架的代码,之前其实我想看来着,不过一看到还要gradlew,换jdk就好麻烦.这次各种折腾把代码fork下来,然后安装gradlew ,然后转换成eclipse支持的,期间升级了eclipse版本和jdk版本到8.否则会有个方法不支持, 流程很简单,先fork一下代码,然后自己改好提交上去,再去Spring框架的pull request请求一下.等大牛合并就行了. 刚开始看测试用例,我当时看到这个方法调用了一个下线的方法.于是改了一下.提交上去之后,**sbrannen ** 回复说: while you're at it, why don't you go ahead fix the related deprecated issues in all of the test classes in spring-jdbc 于是我把spring-jbdc包下面的几个方法调用都改掉了.记得谁说过,任何事情都不是别人的事情,你发现了你就要去做,不要等着别人去做,不会就去学.于是再次修改提交,sbrannen 问我有没有签CLA,这个坑爹的网站挂了.等了几天,昨天终于ok了.今天代码已经合并. 截图留念: https://github.com/spring-projects/spring-framework/commits?author=leizhiyuan 今天要吃两个煎饼果子.……

阅读全文

Spring揭秘-23章,Spring MVC初体验

鸟瞰Spring MVC与其他请求驱动的Web框架思路类似。org.springframework.web.servlet.DispatcherServlet就是Spring mvC中的Front Controller。负责处理请求,但是不针对具体的处理逻辑。而是委派给下一级的控制器,也就是org.……

阅读全文

Spring揭秘-第13章 统一的数据访问异常层次体系

Spring揭秘-第13章 统一的数据访问异常层次体系 <span class="typ">Customer</span><span class="pln"> findCustomerByPK</span><span class="pun">(</span><span class="typ">String</span><span class="pln"> customerId</span><span class="pun">)</span><span class="kwd">throws</span><span class="typ">SQLExcepiton</span><span class="pun">;</span> ……

阅读全文

《Spring揭秘》读书笔记-第二章IoC的基本概念

理念就是让别人为你服务,中文名控制反转,也叫依赖注入DI 假设这个类用来处理新闻,IFXNewsListener 用来获取新闻,IFXNewsPersister 用来把获取的新闻持久化当我们需要获取不同的新闻源,比如道琼斯的新闻时,我们会写一个DowJonesNewsListener类和DowJonesNewsPersister类,然后实例化 如果我们依赖于某个类或服务,最简单而有效的方式就是直接在类的构造函数中新建相应的依赖类。注意看,,我们都是自己主动地去获取依赖的对象!可是回头想想,我们自己每次用到什么依赖对象都要主动地去获取,这是否真的必要?我们最终所要做的,其实就是直接调用依赖对象所提供的某项服务而已能不能我们用的时候自动送过来呢?。现在是用什么,让别人直接送过来就成。所以,简单点儿说,IoC的理念就是,让别人为你服务!在图2-1中,也就是让IoC Service Provider来为你服务!这里,被注入对象就是FXNewsProvider,被依赖于对象IFXNewsListener和IFXNewsPersister 通常情况下,被注入对象会直接依赖于被依赖对象。但是,在IoC的场景中,二者之间通过IoC ServiceProvider来打交道,所有的被注入对象和依赖对象现在由IoC Service Provider统一管理。被注入对象需要什么,直接跟IoC Service Provider招呼一声,后者就会把相应的被依赖对象注入到被注入对象中,从而达到IoC Service Provider为被注入对象服务的目的。IoC Service Provider在这里就是通常的IoC容器所充当的角色。从被注入对象的角度看,与之前直接寻求依赖对象相比,依赖对象的取得方式发生了反转,控制也从被注入对象转到了IoC Service Provider那里这里我们想知道的是?怎么跟IoC Service Provider打招呼在IoC模式中,被注入对象又是通过哪些方式来通知IoC Service Provider为其提供适当服务的呢?三种打招呼的方式,即构造方法注入(constructorinjection)、setter方法注入(setter injection)以及接口注入(interface injection)。构造方法注入:  IoC Service Provider会检查被注入对象的构造方法,取得它所需要的依赖对象列表,进而为其注入相应的对象。setter方法注入  外界就可以通过调用setNewsListener和setNewPersistener方法为FXNewsProvider对象注入所依赖的对象了。接口注入,这个基本不用了。接口注入。从注入方式的使用上来说,接口注入是现在不甚提倡的一种方式,基本处于"退役状态”。因为它强制被注入对象实现不必要的接口,带有侵入性。而构造方法注入和setter方法注入则不需要如此。8q构造方法注入。这种注入方式的优点就是,对象在构造完成之后,即已进入就绪状态,可以 9马上使用。缺点就是,当依赖对象比较多的时候,构造方法的参数列表会比较长。而通过反射构造对象的时候,对相同类型的参数的处理会比较困难,维护和使用上也比较麻烦。而且在Java中,构造方法无法被继承,无法设置默认值。对于非必须的依赖处理,可能需要引入多个构造方法,而参数数量的变动可能造成维护上的不便。10qsetter方法注入。因为方法可以命名,所以setter方法注入在描述性上要比构造方法注入好一些。 11另外,setter方法可以被继承,允许设置默认值,而且有良好的IDE支持。缺点当然就是对象无法在构造完成后马上进入就绪状态。12综上所述,构造方法注入和setter方法注入因为其侵入性较弱,且易于理解和使用,所以是现在使用最多的注入方式;而接口注入因为侵入性较强,近年来已经不流行了。回到开头的代码  由于这里已经写死了,所以当我们添加了一个新的新闻源,比如M4网站的时候,这个对象不能用了,我们要新写一个M4NewsProvider的类,然后新写新闻获取类,然后重新实现。而使用了IoC之后,  我们只要实现一个MarketWin24NewsListener雷就可以,而且FXNewsProvider 可以重用。而且使用了IoC之后,单元测试变得简单,我们只有写一个MockNewsPersister就可以来测试了。……

阅读全文

《Spring揭秘》读书笔记-第一章Spring框架的由来

1.框架的由来 倡导J2EE轻量级应用解决方案 框架总结结构 整个Spring架构建立在Core核心模块上,是基础,该模块中,有一个IoC容器的实现,用来以依赖注入的方式管理对象之间的依赖关系。Core中还有一些气筒工具类,比如IO工具类 从图中看到,AOP模块,提供了轻便二强大的AOP框架,一AOP的形式增强POJO的能力,弥补OOP/OOSD的不足,采用Proxy模式,与IoC容器相结合 继续向上看,在Core和AOP之上,提供了完毕的数据访问和事务管理的抽象,其中,对JDBC API的最佳实践简化了API的使用,还未ORM产品提供了统一的支持, 为了简化Java EE的服务,比如JNDI,JMS等等,Spring还提供了这些的集成服务, 最后就是Web模块,提供了一套自己的Web MVC框架,上层模块依赖于下层模块,水平之间的模块彼此基本可以认为独立。 Spring不仅仅是容器,更是开发任何Java应用的框架, Spring 框架之上衍生的产品包括不限于Spring Web Flow,Spring Web Services,Spring Security,Spring Integration,Spring Rich Client 等等等等……

阅读全文

Spring依赖注入

在Spring框架中,依赖注入设计模式主要用来定义对象之间的依赖,存在两种主要类型 1)setter注入(设置器) 2)constructor注入(构造器) 1.Setter注入 是最流行最简单的DI方法,通过一个setter方法来完成依赖。 例子: 一个有一个setter方法的Helper类 再写一个bean配合iwenjianshengming这些bean,并且通过property(属性)标签来设置依赖 看到了把。我们只需要一个setter方法把CsvOutputGenerator注入进去就行了 2.Constructor注入 这种方式是通过一个构造函数来完成依赖设置的 例子: 一个有着一个构造函数的Helper类 然后当然是一个bean配置文件了。通过constructor-arg标签来写依赖 该选哪个? 没有硬性规定,哪个合适就用那个,由于setter的简单性,一般还是setter用得多。……

阅读全文

Spring松耦合示例

面向对象设计的理念是把整个系统分成一组可重用的组件,然而,当系统变得越大的时候,尤其是在java中,这最大的对象依赖将会紧紧耦合,以至于非常难以管理和修改,而现在,你可以使用Spring框架扮演一个中间模块的角色,方便高效地管理其他组件依赖 输出生成的例子 看个例子,假设你的项目有一个方法可以输出内容到csv或者json格式,你可能写出这样的代码 ,然后是实现接口的类 再写个Json生成的类 有好几种方法来调用IOutputGenerator接口,以及我们如何使用Spring来避免对象的过度耦合。 方法1-直接调用 问题: 这种方法,output这个对象和CsvOutputGenerator耦合在了一起,每次要改变输出格式的话都要修改代码,如果这类代码遍布项目,那么改起来就跪了 方法2-通过帮助类调用 也许你会想创建一个Helper类吧所有的output实现都移进去 然后可以这样调用 问题: 看起来似乎更加优雅了,你仅仅需要管理这个Helper类就可以实现不同格式的输出需求改变了,然而,Helper还是和CvsOutputGenerator耦合,每一次要改变输出格式的时候,都要对Helper类做一下微调。 方法3-Spring Spring依赖注入很合适,可以使不同的格式生成类分离开来 首先对OutputHelper做一点微调,添加了一个参数 然后创建一个Spring bean配置文件,并声明所有的Java对象依赖 然后通过Spring调用 以后要改Json格式,直接改一下xml配置文件就行了。能够减少错误 结论 通过Spring框架的依赖注入,可以优雅的管理对象依赖,更大的灵活性,尤其是对于Java项目非常好用。……

阅读全文