spring框架基础与IoC基础

来源:互联网 发布:mac怎么修复磁盘权限 编辑:程序博客网 时间:2024/05/16 11:28

spring框架构建在core核心模块上,它是整个框架的基础。spring为我们提供了一个IoC容器实现,用于帮助我们以依赖注入的方式管理对象之间的依赖关系。

沿着spring生命之树往上左序遍历,我们将到AOP模,让我们可以以AOP的形式增强各POJO的能力,进而补足OOP/OOSD之缺憾。Spring的AOP框架符合AOP Alliance规范,采用Proxy模式构建,与IoC容器相结合,可以充分显示出Spring AOP的强大威力。

继续上行,Spring框架在Core核心模块和AOP模块的基础上,为我们提供了完备的数据访问和事务管理的抽象和集成服务。在数据访问支持方面,Spring对JDBC API的最佳实践极大地简化了该API的使用。除此之外,Spring框架为各种当前业界流行的ORM产品,比如Hibernate、iBATIS、Toplink、JPA等提供了形式统一的集成支持。Spring框架中的事务管理抽象层是Spring AOP的最佳实践,它直接构建在Spring AOP的基础之上,为我们提供了编程式事务管理和声明式事务管理的完备支持。这些服务极大地简化了日常应用开发过程中的数据访问和事务管理工作。


通常情况下,被注入对象会直接依赖于被依赖对象。但是,在IoC的场景中,二者之间通过IoC ServiceProvider来打交道,所有的被注入对象和依赖对象现在由IoC Service Provider统一管理。被注入对象需要什么,直接跟IoC Service Provider招呼一声,后者就会把相应的被依赖对象注入到被注入对象中,从而达到IoC Service Provider为被注入对象服务的目的。IoC Service Provider在这里就是通常的IoC容器所充当的角色。从被注入对象的角度看,与之前直接寻求依赖对象相比,依赖对象的取得方式发生了反转,控制也从被注入对象转到了IoC Service Provider那里①。


三种依赖注入的方式,即构造方法注入(constructor injection)、setter方法注入(setter injection)以及接口注入(interface injection)

构造方法注入就是被注入对象可以通过在其构造方法中声明依赖对象的参数列表,让外部知道它需要哪些依赖对象。

public NewsProvider(NewsListener newsListener,NewsPersister newsPersister)

{

this.newsListener=newsListener;

this.newsPersister=newsPersister;

}

IoC Service Provider会检查被注入对象的构造方法,取得依赖对象列表,进而为其注入对象。同一对象不能被构造2次,被注入对象的构造及生命周期由IoC Service Provider来管理。

setter方法注入:对象类用源代码生成getter与setter方法。对象只要为其依赖对象的属性添加setter方法,就可以通过setter方法将相应的依赖对象设置到被注入对象中。

package com.kplus.model;

import com.kplus.web.action.BaseAction;

public class Pingan extends BaseAction {

 private String orderId;
 private double amount;
 private String objectName;
 private String remark;
 public String getOrderId() {
  return orderId;
 }
 public void setOrderId(String orderId) {
  this.orderId = orderId;
 }
 public double getAmount() {
  return amount;
 }
 public void setAmount(double amount) {
  this.amount = amount;
 }
 public String getObjectName() {
  return objectName;
 }
 public void setObjectName(String objectName) {
  this.objectName = objectName;
 }
 public String getRemark() {
  return remark;
 }
 public void setRemark(String remark) {
  this.remark = remark;
 }
 
}

setter方法注入不像构造方法那样对象构造完成就能使用,但相对来说更宽松一些,可以在对象构造完成后再注入

接口注入:被注入对象如果想要IoC Service Provider为其注入依赖对象,就必须实现某个接口。

三种注入方式比较:
接口注入:接口注入是现在不甚提倡的一种方式,基本处于“退役状态”。因为它强制被注入对象实现不必要的接口,带有侵入性。
构造方法注入:优点对象构造完成即已进入就绪状态马上使用,缺点对象多时构造方法的参数列表会比较长。而通过反射构造对象时,对相同类型的参数的处理会比较困难,维护和使用比较麻烦。而且在java中构造方法无法被继承,无法设置默认值
setter方法注入。因为方法可以命名,所以setter方法注入在描述性上要比构造方法注入好一些。另外,setter方法可以被继承,允许设置默认值,而且有良好的IDE支持。缺点当然就是对象无法在构造完成后马上进入就绪状态。

0 0
原创粉丝点击