`
and4walker
  • 浏览: 565115 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring之IOC篇

阅读更多
IOC的三种注射方式:

1、  第一种是通过接口注射,这种方式要求我们的类必须实现容器给定的一个接口,然后容器会利用这个接口给我们这个类来注射他所依赖的类

2、  第二种是通过setter方法来注射,这种方式也是Spring推荐的方式,等会我们就用setter方式来讲解一下Spring 的IOC

3、  第三种是通过构造方法来注射类,这种方式Spring 同样给于了实现,他和通过setter方式都在类里无任何侵入性,但是不是没有侵入性,只是把侵入性转移了,显然第一种方式要求实现特定的接口,侵入性非常强,不方便以后移植。

Sample:有一个HelloParent类要打印出”Hello,World!”,但是HelloParent并没有这个功能,Hello类有这个功能,按照常理只需HelloParent继承Hello类就可完成,但是以后HelloParent类不满意的话,想换用其它的类打印这个字符串,此时必须修改源代码!它违背了《java与模式》所提到的开闭原则,所以这种设计不可取。===》引入Spring:

1.导包:Spring.jar和commons-logging.jar;

2.建立Hello接口:

public interface Hello {
 public void sayHello(); 
}


3.建立Hello接口的实现类HelloImpl:

public class HelloImpl implements Hello{
 public void sayHello(){
  System.out.println("Helloword");
 }
}


4.建立HelloParent类,这个类要依赖于Hello这个接口的具体实现类,建立setter方法,等会Spring就是靠这个方法来注入Hello的具体实现类的。然后建立sayHello()方法,把具体的操作委托给Hello的实现类来完成。

public class HelloParent {
    public Hello hello;
    /**
     * @param hello The hello to set.
     */
    public void setHello(Hello hello)
    {
        this.hello = hello;
    }
    public void sayHello()
    {
        hello.sayHello();
    }
    public void init()
    {
        System.out.println("init......");
    }
    public void destroy()
    {
        System.out.println("destroy......");
    }
}


5.建立一个Bean.xml文件

<beans>
    <bean id="helloParent" class="com.haha.HelloParent" init-method="init" destroy-method="destroy" singleton="true">
        <property name="hello"><ref bean="helloBean"/></property> 
    </bean>
    <bean id="helloBean" class="com.haha.HelloImpl"/>
</beans>



6.建立一个Client调用:

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class HelloClient {
  XmlBeanFactory factory;
     public HelloClient()
     {
         Resource cr = new ClassPathResource("bean.xml");
         factory = new XmlBeanFactory(cr);
     }
     public void sayHello()
     {
         HelloParent helloParent = (HelloParent)factory.getBean("helloParent");
         helloParent.sayHello();
         factory.destroySingletons();
     }
     public static void main(String[] args)
     {
         HelloClient hc = new HelloClient();
         hc.sayHello();
     }
}


注意:bean.xml文件中init-method="init"这个是在容器注入类后会调用的一个初始化方法,destroy-method="destroy"这个是容器在销毁对象的时候会调用的一个销毁方法,singleton="true"这个确保建立的helloParent这个对象是唯一的,所以的线程共享这一个对象。init()方法,在容器生成HelloImpl的对象后注入到helloParent之后就会调用。

Spring的优点:现在,HelloParent讨厌HelloImpl这个实现类了,好,我们现在换用其他的实现类,来完成这个操作,所以在定义一个实现类HelloImpl2,这个时候我们不需要修改任何源代码,只需要修改xml配置文件即可。
分享到:
评论

相关推荐

    Spring之IOC示例

    在IT行业中,Spring框架是Java开发领域中一个极为...通过阅读《Spring之IOC示例》这篇博客(博文链接:https://huangminwen.iteye.com/blog/1041298),可以更深入地理解Spring的IOC机制,并学习如何在实际项目中应用。

    以注解方式模拟Spring IoC AOP

    本篇将深入探讨如何通过注解方式来模拟Spring的这两种机制,帮助你理解其底层原理。 ### 1. 依赖注入(IoC) 依赖注入是Spring框架的核心特性之一,它通过反转对象创建和管理的控制权,使得应用程序组件之间的耦合...

    Spring注解IOC所用的jar包

    本篇文章将详细探讨Spring注解驱动的IoC,以及相关jar包在实际应用中的作用。 Spring的注解IOC允许开发者在不使用XML配置的情况下,通过在类或方法上添加注解来声明依赖关系。这极大地简化了代码结构,提高了可维护...

    Spring的IoC容器

    Spring框架的核心特性之一是依赖注入(Dependency Injection,简称DI),而实现这一特性的核心组件就是IoC(Inversion of Control)容器。IoC容器是Spring框架的心脏,它负责管理对象的生命周期和对象之间的关系。在...

    模拟Spring的Ioc功能

    在Spring框架中,IoC(Inversion of Control,控制反转)是核心特性之一,它将对象的创建和管理从应用程序代码中分离出来,使得代码更加灵活、可维护。本篇文章将详细探讨如何利用jdom2解析XML文档以及通过反射机制...

    Spring实现原理及IoC容器的优点

    本篇文章将深入探讨Spring实现原理,阐述IoC容器的优点,并指导如何在Eclipse中创建一个Spring的Web应用。 首先,让我们理解Spring的核心——IoC容器。IoC是一种设计模式,它改变了对象获取依赖的方式。在传统的...

    《partner4java 讲述Spring入门》之第一步:Spring概述与Spring IoC

    《Spring入门:Spring概述与Spring IoC》是针对初学者的一篇教程,旨在引导开发者进入Spring框架的世界。本文将深入探讨Spring的核心概念,特别是Spring的Inversion of Control(IoC,控制反转)特性,以及如何在...

    java模拟spring ioc

    在Java编程领域,Spring框架是应用最广泛的轻量级框架之一,尤其以其依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IOC)的核心特性著称。这篇博客“java模拟spring ioc”很可能...

    Spring框架系列(6) - Spring IOC实现原理详解之IOC体系结构设计.doc

    Spring 框架的IoC(Inversion of Control,控制反转)实现原理是其核心特性之一,它使得组件之间的依赖关系不再由代码直接管理,而是交由容器负责。本篇文章将详细探讨Spring IoC的体系结构设计,以及如何实现这些...

    在Struts2中整合Spring的IoC

    这篇博客“在Struts2中整合Spring的IoC”将深入探讨这一集成过程。 首先,理解IoC(Inversion of Control,控制反转)是Spring的核心理念。它使得应用程序不再直接创建对象,而是通过配置文件或注解来定义对象及其...

    模拟spring ioc技术

    本篇文章将详细解析“模拟Spring IOC技术”的核心概念,并通过一个小Demo帮助你深入理解IOC的工作原理。 首先,我们来解释一下什么是IOC和DI。控制反转(IOC)是编程中的一个设计原则,它改变了对象获取依赖的方式...

    Java仿Spring框架IOC控制反转利用反射简单实现(源码)

    本篇文章将详细探讨如何通过反射机制来实现一个简单的Java IOC容器,以此来模仿Spring框架的行为。 首先,理解控制反转(IOC)的概念至关重要。在传统的编程模式中,对象通常自行创建依赖对象,而在IOC中,这种创建...

    死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序.pdf

    在深入理解 Spring AOP 的源码时,需要熟悉 Spring IoC 的工作原理,以及 AOP 相关的概念,如切点表达式、通知类型等。了解这些基础知识可以帮助我们更好地掌握 Spring AOP 的实现细节。在分析源码时,可以参考作者...

    详谈Spring对IOC的理解(推荐篇)

    Spring对IOC的理解 Spring框架中的IOC(Inversion of Control,控制反转)是一种软件设计模式,它将传统的编程方式中对象的创建和管理权力从应用程序中移除,并交给了IOC容器来统一管理。这种设计模式可以减少程序...

Global site tag (gtag.js) - Google Analytics