Sring框架初级探索

依赖注入


依赖注入,是什么? 是一种不需要每次都在自身构造中声明显式绑定特定对象实例化一个依赖的方法。
分为构造器注入和setter注入,增加了该类的扩展性,让它能更容易适用于其他同接口的多种不同实现而非绑定到一个具体类中去。
在外部注入进行。

传统方法是在一个类中构造器中实例化一个依赖对象,但是这个依赖对象不方便从外部去获取到,不利于做单元测试。
如果通过注入方式进行,则外部进入的对象可控,可以对中间的操作过程进行监控。
构造器注入和setter注入的优缺点区别:
主要和注入的顺序和初始化就写入有关
多参数和复杂的构造和对象引入多的时候构造器注入就麻烦
setter用property,构造用ref,如果是xml文件里的话
构造注入可以在构造器中决定依赖关系的注入顺序,优先依赖的优先注入。例如,组件中其他依赖关系的注入,常常要依赖于DataSrouce的注入。采用构造注入,可以在代码中清晰的决定注入顺序。
对于依赖关系无需变化的Bean,构造注入更有用处。因为没有Setter方法,所有的依赖关系全部在构造器内设定。因此,无需担心后续的代码对依赖关系产生破坏。
依赖关系只能在构造器中设定,则只有组件的创建者才能改变组件的依赖关系。对组件的调用者而言,组件内部的依赖关系完全透明,更符合高内聚的原则。

现在知道了注入器的好处,那么如何将外部的依赖对象注入进去呢
装配和注解?
装配:通过xml配置将bean的依赖对象引入进去,作为构造器的参数,并且可以在注入对象中做其本身的声明。
也可以用java configuration和bean@引入
感觉像是动态了起来,不知道给自己的会是什么具体的对象,对象本身的设计,实现了要使用的接口就行,可以是不同的实现内容。增加了复用性。

除此之外还会有加载xml文件的定义,在代码或者配置中去完成上下文的定义 。然后context配置会去扫描目录扫上下文配置,然后controller需要用到依赖时可以用@Resource 或者 @Autowired去自动完成注入。

面向切面编程


AOP
简单来说,给我的感觉是将一个统一的需求做成一个模块,然后将之切入其他由多个功能模块组成的完整流程中去,由于不同的业务流程所需功能模块即会重叠,也会有不需要额外的引入,或者大模块套小模块?在每个模块里都加额外的切入代码会很丑。
通过aop,将这种统一的东西从业务核心代码中就可以抽离出来。
这个时候就有点IOC容器的感觉了,
一个很精辟的例子,如果对象A在某个流程中需要添入统一流程B,如果是用依赖注入实现,那不需要的时候怎么办,是不是还要做空值判断或者实例化一个不需要B的A,就更复杂了
xml中 一个bean本身,也是切面,插入一个流程或者相关函数的前后。

容器


下班,之后补充


发表评论 暂无评论

*