挖金子的矿工

Shaobo的小地方

spring点滴

 

The Spring composes disparate components into a fully working application ready for use.

经过配置后的spring,将各组件以bean的形式纳入IoC(Inversion of Control)容器的管理,在程序起始时warm up这个容器,在App全局范围内形成一个context,在程序运行时可直接由spring从context中扫描组件依赖,从容器中的bean生成对象供使用。

 

spring3.0的context配置方法有三种了。最早的纯xml配置方法是细节最清楚的,xml中写得详细,使我们可以按POJO形式写java类:不需继承奇怪的父类,不需实现奇怪的接口,也不需要什么特别的annotation。不过配置实在过于静态,不利于开发人员的快速开发和维护,于是出现了Annotation-driven的容器配置方式,可支持自动扫描组件并注入依赖。例如自动寻找需要的bean并完成依赖注入的autowiring过程,开发人员需要做的事情只是告诉applicationContext支持自动扫描组件,之后加两个annotation到java代码之中就可以了:为被依赖的类加上@Component,为需要注入的reference加上@Autowired。@Component作为将类自动作为bean纳入spring管理的标志,可以说是个父annotation,它有三种特殊化:@Service,常用在一般Model类对象上;@Repository,在持久化层,常配合数据库访问方式;@Controller,作为Controller标志。最新的spring容器配置方式是Java-based,直接写Config类,例如:

 

 

 

它与下面的xml配置片段是等效的。

 

当前项目里用的还是Annotation-based container config方式,所以主要还是看它吧。

 

 

@Autowired可修饰类的field、constructor和method,在该类被使用时spring可扫描并注入需要的依赖。

  1. 如果放在constructor上,那么所有的参数都将被spring注入,这也是constructor强制性的表现;
  2. 可放在field前并设required元素为false来方便人为设定初始值,此时spring从context中找不到该依赖的对象时不会fail;
  3. 要考虑到测试的因素,因为对field设定@Autowired后会影响为该类使用mock对象;
  4. @Autowired不是万能的,在需要特别指定实现类或参数值为依赖的时候,不得不回到xml中来配置bean, spring需要根据bean里指定的类型以及设置的参数来初始化constructor parameter或property。

可怕的地方还有一个:只要工程中有一处Autowired没有找到对应的bean(没有设置required元素为false),spring在scan时就会报错说load失败,即使我运行的是毫不相干的测试。

 

 

spring框架下的unit test vs. integration test

unit test:

  • 只测一个类中一个单元的逻辑行为;
  • 要保持对环境的最小依赖,不应牵扯其他功能单元;
  • 特别提到的是它与应spring无关!一个产品类中使用了spring,在context中配置了其参数,尽管这些参数直接影响到了类的一个行为,在单元测试中也不能为了获取这些信息而引入spring,你需要想到的是这些“真实”的信息其实单元测试是没必要理会的,不能依赖于它。

integration test:

  • 测试的是单元之间协作下的系统;
  • 自然需要spring提供依赖注入。测试的方法是在测试类前加上@RunWith(SpringJUnit4ClassRunner.class),然后尽量正常得像使用产品代码一样使用spring写测试。

 

 

阅读更多
个人分类: TWU Collection
想对作者说点什么? 我来说一句

C语言点滴 赵岩著 pdf

2016年07月03日 6.9MB 下载

C语言点滴

2015年01月28日 3.99MB 下载

液体点滴速度监控装置设计

2010年05月05日 275KB 下载

日记工具 记录生活点滴

2010年11月20日 165KB 下载

没有更多推荐了,返回首页

不良信息举报

spring点滴

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭