`
z75148885
  • 浏览: 191590 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

应用IoC,代码马上直观多了

阅读更多


IoC在应用开发中是一个非常有力的概念。如Martin Flower所述,IoC的一种表现形式就是依赖性注射。依赖性注射用的是好莱坞原则,"不要找我,我会找你的。"。换句来说,你的类不会去查找或是实例化它们所依赖的类。控制恰好是反过来的,某种容器会设置这种依赖关系。使用IoC常常使代码更加简洁,并且为相互依赖的类提供一种很好的方法。依赖性注射存在三种方式:

a) 基于setter的(setter-based):这些类是特指那些拥有一个无参数的构造器,在绑定依赖关系时提供setter给IoC容器使用的javabean。这是Spring推荐使用的形式。当Spring支持基于构造器的注射时,大量的构造器带的参数就很难管理。

b) 基于构造器的(Constructor-based):这种类拥有带有多个参数的构造器。IoC容器会查找和激活那些基于大量参数和对象类型的构造器。这种方法保证了一个bean不是在一个非法状态下创建的。

c) 基于getter的(Getter-based)或称为方法注射:与基于setter的方式类似,不同的是你为你的添加一个getter方法。当它在内部运行时,IoC容器会重载这个方法,但在测试时你很容易指定你要用的getter方法。这种方法只是在最近被提及到。你可以从TheServerSide.com上找到更多的信息。

下面是一个没有预设IoC一个类的例子。它是一个叫做listUsers的Struts Action,它依赖一个UserDAO类,而这个类需要一个Connection作为构造器的一部分。

public class ListUsers
extends Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
// get a connection from the database
Connection conn = DatabaseUtils.getConnection();
UserDAO dao = DAOFactory.createUserDAO("hibernate", conn);
List users = dao.getUsers();
DatabaseUtils.closeConnection(conn);
return mapping.findForward("success");
}
}
上面的代码设计比较难看。通过实现一个预设IoC的类把代码清理一下。
public void deleteMudadmUsers(final MudadmUsers mudadmUsers) {
getHibernateTemplate().delete(mudadmUsers);
}

public class ListUsers
extends Action {
private UserDAO dao;
public void setUserDAO(UserDAO userDAO) {
this.dao = userDAO;
}

public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
List users = dao.getUsers();
return mapping.findForward("success");
}
}
上面的类没有包含任何查找(lookup)的代码。这样代码看起来更加清晰,并有利于测试。例如,在你的测试中,你可以使用针对DAO使用一个Mock Object来消除数据层的各依赖关系。一个好的IoC容器应该允许开发人员为UserDAO绑定一个连接(connection)(或是DataSource)。使用Spring你可以选择,把连接绑定到数据层,还是使用一个过滤器为每个请求打开一个新的连接。

分享到:
评论

相关推荐

    IOC和AOP深刻理解基础代码测试

    总之,通过这个基础测试项目,初学者可以深入了解Spring框架如何实现IOC和AOP,从而更好地应用于实际的Java Web开发中,提高代码质量,降低维护成本。记住,理论结合实践是学习的关键,动手操作这些示例代码,将会对...

    SOA实践 -- 使用IoC和AOP重构SOA应用

    虽然描述部分为空,但我们可以根据标题推测,这篇文章可能讲述了一个实际的案例或项目,其中作者使用IoC和AOP技术对现有的SOA应用进行了改造,提高了代码的解耦度和模块化,使得系统更易于扩展和维护。博文链接可能...

    Flex IOC框架比较分析示例代码

    通过对比这些示例代码,你可以直观地看到各个框架在实际应用中的差异,了解它们如何解决相同问题,以及各自的优缺点。 总结来说,选择Flex IOC框架应考虑项目规模、团队熟悉程度、性能需求以及是否需要与Java或其他...

    spring IOC授课代码

    总的来说,Spring的IOC和DI机制是现代Java应用开发中的重要工具,它们帮助我们构建更加灵活、可扩展的系统。在Spring IOCLab这个项目中,你可以通过实际操作来学习和理解这些概念,通过编写和运行代码加深对Spring...

    自己实现的ioc容器

    IoC是指将控制权从应用程序的代码中转移出来,交由一个外部容器进行管理。在传统的编程模式中,对象会自行创建其依赖的对象,而在IoC中,这些依赖是由容器负责创建和注入的。这样做的好处在于,对象不再直接依赖于...

    多种IOC框架的比较

    - **特点**:Spring.NET是一个功能全面的企业级框架,除了核心的依赖注入功能外,还包含了事务管理、数据访问抽象层等多个模块,适用于构建复杂的企业应用系统。 #### StructMap - **初始化方式**:StructMap同样...

    JavaEE Spring IoC注解

    通过学习和理解这些代码,你可以更深入地了解Spring框架如何通过注解实现IoC,以及如何在实际项目中应用这些概念。实践是掌握知识的关键,所以建议你仔细研究这个测试案例,以便更好地掌握Spring的注解驱动IoC机制。

    poco capsule ioc框架

    使用IoC和依赖注入可以使得应用程序的结构变得更加直观,同时保持其轻量级。由于依赖关系是在运行时动态注入的,因此不会增加额外的编译时间开销。此外,依赖注入框架通常是轻量级的,对性能的影响非常小。 ##### ...

    什么是Ioc和DI

    这种方式虽然直观,但在复杂的应用系统中,会导致代码耦合度过高,难以维护和扩展。 而IoC模式通过将对象的创建和依赖关系的管理交由外部容器处理,从而实现了控制权的反转。在IoC模式下,对象不再负责创建或查找其...

    雷泰IOC-0640控制卡用户手册V1.3

    综上所述,雷泰IOC-0640控制卡用户手册V1.3涵盖了从硬件安装到软件开发的全过程,通过详细的技术说明和实用的示例代码,让用户能够全面掌握控制卡的使用方法,进而有效地将其应用于各种自动化控制系统中。

    Spring IOC容器实现分析.pdf 下载

    2. Java配置:Spring 3.0引入了@Configuration和@Bean注解,允许用Java代码来配置Bean,更直观且易于测试。 3. 注解驱动:通过@Component、@Service、@Repository和@Controller等注解标记Bean,@Autowired自动注入...

    springioc的搭建和配置

    通过 IoC,Spring 能够帮助开发者更好地管理对象间的依赖关系,从而简化应用程序的开发流程并提高代码的可维护性。 IoC 的基本思想是将对象的创建和管理权交给 Spring 容器,这样就可以避免对象之间直接耦合,实现...

    自定义IOC容器

    IOC容器是Spring框架的核心,它负责管理和装配应用中的对象,实现了依赖注入,降低了代码间的耦合度。通过自行实现IOC容器,开发者可以更直观地掌握其工作机制,提升对Spring的理解。 在Spring框架中,IOC容器的...

    一个简单的spring IOC演示demo

    总的来说,这个“一个简单的spring IOC演示demo”为我们提供了一个直观的学习平台,让我们能够亲手实践Spring IOC的核心概念和操作。通过深入学习和理解,我们可以更好地掌握Spring框架,提高我们的Java应用开发能力...

    spring IOC实现(墨者革离)

    这种方式更加简洁且直观,是现代Spring应用的首选。 在"城门叩问"的场景中,可能有门卫(GateKeeper)角色需要依赖剧本编写者(ScriptWriter)来执行特定的检查逻辑。通过Spring的IOC,我们可以轻松地管理和组装...

    png,jpg,gif,bmp转ioc图标

    在IT领域,图标是用户界面设计中的重要元素,它们简洁直观地传达了应用程序的功能或状态。IOC(Icon in the Cloud)图标是一种特定格式,通常用于Web应用或云端服务,允许在不同平台上保持一致的视觉风格。本软件...

    Spring.net二----初探IOC容器.rar源代码

    Spring.Demo项目很可能是包含一个简单的Spring.NET应用示例,可能包括了XML配置文件、服务接口和实现类、以及如何使用IoC容器来获取和使用这些对象的代码。通过这个示例,你可以更直观地了解如何在实际项目中运用...

    浅谈 Spring 原理 透析,ioc aop

    * 提高代码的重用性:Spring 框架通过 IOC 和依赖注入,提高了代码的重用性。 * 方便单元测试:Spring 框架使得单元测试可以不再依赖容器。 传统的 EJB 开发模式 传统的 EJB 开发模式需要实现 RMI 和 HOME 等接口...

    IOC图标提取器

    "IOC图标提取器"是一款小巧而实用的工具,主要用于从应用程序的界面中提取图标资源。在计算机编程领域,图标(ICO)是用于表示程序、文件或系统元素的图像文件格式。这款工具允许用户轻松地从桌面应用或其他软件中...

    My.Ioc v0.9.2 Source

    在软件开发领域,依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)是两种重要的设计模式,它们能够提升代码的可测试性、可维护性和灵活性。在.NET平台上,My.Ioc是一款由国内...

Global site tag (gtag.js) - Google Analytics