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

Spring简介之依赖注入

阅读更多

1、起源

引:2002Rod Johnson写了<<Expert one on one J2EE design and development>>一书,对传统的J2EE架构提出深层次的思考和质疑,并提出J2EE的实用主义思想。2003年,J2EE领域出现了一个新的框架:Spring,对该书的思想进行了全面体现和完善。

Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
• 目的:解决企业应用开发的复杂性
• 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
• 范围:任何Java应用
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
■ 轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 
■ 控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoCJNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
■ 面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。 
■ 容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。 
■ 框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。 
所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。

2、下载、安装

http://www.springframework.org 

myeclipse5.5集成1.2myeclipse6.0集成2.0myeclipse6.5集成2.5

3、在spring中大量使用的两种模式

 工厂模式

 单态模式

一般Singleton模式通常有几种形式:

public class Singleton {
  private Singleton(){}
  //在自己内部定义自己一个实例 注意这是private 只供内部调用
  private static Singleton instance = new Singleton();
  //这里提供了一个供外部访问本class的静态方法,可以直接访问  
  public static Singleton getInstance() {
    return instance;   
   }
}

 


第二种形式:

public class Singleton {
  private static Singleton instance = null;
  public static synchronized Singleton getInstance() {
  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     
  //使用时生成实例!
  if (instance==null)
    instance=new Singleton();
    return instance; 

}
}

 

4spring基本环境搭建

 <1>导包

 <2>添加applicationContext.xml文件

5、面向接口编程——实现必须依赖抽象,而不是抽象依赖实现。(依赖注入)

6spring支持Set注入和构造注入。

何谓依赖注入?

Dependency Injection依赖注入依赖注入的意义是:保留抽象接口,让组件(Component )依赖于抽象接口,当组件要与其它实际的对象发生依赖关系时,运行时动态注入依赖的实际对象

示例代码:

package org.sixsun.spring;

public class HelloBean {
    private String name;
    private String helloWord;

    public HelloBean() {
    }
    
    public HelloBean(String name, String helloWord) {
        this.name = name;
        this.helloWord = helloWord;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }

    public void setHelloWord(String helloWord) { 
        this.helloWord = helloWord; 
    } 
    public String getHelloWord() { 
        return helloWord; 
    } 
}

 

1. Constructor injection

1.1 Bean的配置文件中,使用<constructor-arg>来表示将使用Constructor injection,由于使用Constructor injection时并不如Setter injection时拥有setXXX()这样易懂的名称,所以必须指定参数的位置索引,index属性就是用于指定对象将注入至建构函式中的哪一个参数,参数的顺序指定中,第一个参数的索引值是0,第二个是1,依此类推。

示例配置:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" 
"http://www.springframework.org/dtd/spring-beans.dtd"> 
<beans> 
    <bean id="helloBean" 
          class=" org.sixsun.spring.HelloBean"> 
        <constructor-arg index="0">
            <value>sixsun</value>
        </constructor-arg> 
        <constructor-arg index="1">
            <value>HelloSpring</value>
        </constructor-arg> 
    </bean> 
</beans>


1.2 如果constructor上只有一个参数,则不必指定index属性。

示例配置:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" 
"http://www.springframework.org/dtd/spring-beans.dtd"> 
<beans> 
    <bean id="helloBean" 
          class=" org.sixsun.spring.HelloBean"> 
        <constructor-arg>
            <value>sixsun</value>
        </constructor-arg> 
    </bean> 
</beans> 

 

1.3 若有两个以上的参数,而参数类型各不相同的话,可以使用type来指定constructor上的参数类型。

示例代码:

package org.sixsun.spring;

public class HelloBean {
    private String name;
    private Integer age;

    public HelloBean() {
    }
    
    public HelloBean(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }

    public void setAge(Integer age) { 
        this.age = age; 
    } 
    public Integer getAge() { 
        return age; 
    } 
}

 

示例配置:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" 
"http://www.springframework.org/dtd/spring-beans.dtd"> 
<beans> 
    <bean id="helloBean" 
          class=" org.sixsun.spring.HelloBean"> 
        <constructor-arg type="java.lang.String">
            <value>sixsun</value>
        </constructor-arg> 
        <constructor-arg type="java.lang.Integer">
            <value>23</value>
        </constructor-arg> 
    </bean> 
</beans>



2. property injection

示例代码:

package org.sixsun.spring;

import java.util.Date;

public class HelloBean { 
    private String helloWord; 
    private Date date; 
    
    public void setHelloWord(String helloWord) { 
        this.helloWord = helloWord; 
    } 
    public String getHelloWord() { 
        return helloWord; 
    } 
    public void setDate(Date date) { 
        this.date = date; 
    }    
    public Date getDate() { 
        return date; 
    } 
}


2.1 直接指定值或是使用<ref>直接指定参考至其它的Bean

示例配置:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" 
"http://www.springframework.org/dtd/spring-beans.dtd">

<beans> 
    <bean id="dateBean" class="java.util.Date"/> 
    
    <bean id="helloBean" class="org.sixsun.spring.HelloBean"> 
        <property name="helloWord"> 
            <value>Hello!</value> 
        </property> 
        <property name="date"> 
            <ref bean="dateBean"/> 
        </property> 
    </bean> 
</beans>

 

2.2 也可以用内部Bean的方式来注入依赖关系

示例配置:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" 
"http://www.springframework.org/dtd/spring-beans.dtd">

<beans> 
    <bean id="helloBean" class="org.sixsun.spring.HelloBean"> 
        <property name="helloWord"> 
            <value>Hello!</value> 
        </property> 
        <property name="date"> 
            <bean id="dateBean" class="java.util.Date"/>
        </property> 
    </bean> 
</beans>

 

 

<!--EndFragment-->
分享到:
评论

相关推荐

    Spring Ioc 注解 依赖注入

    其中,IoC和依赖注入(Dependency Injection, DI)是Spring框架最核心的部分之一。 #### 二、IoC容器概述 在传统的Java应用程序中,对象的创建和管理通常由程序员来完成。这种方式会导致代码之间存在高度耦合,难以...

    spring学习:依赖注入的几种方式讨论

    在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它使得对象之间的耦合度降低,提高了代码的可测试性和可维护性。本文将深入探讨Spring中的依赖注入实现方式,以及如何通过样例文件...

    Spring 控制反转 依赖注入

    **Spring 框架中的控制反转 (IoC) 和依赖注入 (DI)** 在软件开发中,控制反转(Inversion of Control,简称IoC)是一种设计原则,它将对象的创建和管理权从代码中剥离出来,转交给一个外部容器(如Spring框架)。...

    spring依赖注入底层详解

    Spring依赖注入是Spring框架的核心特性之一,它极大地简化了Java应用程序的开发,使得对象之间的依赖关系得以解耦,提高了代码的可测试性和可维护性。本文将深入探讨Spring依赖注入的底层实现机制。 首先,我们要...

    spring依赖注入

    Spring依赖注入是Spring框架的核心特性之一,它使得对象之间的依赖关系得以解耦,增强了代码的可测试性和可维护性。依赖注入(Dependency Injection,简称DI)的理念是,一个对象不应该负责寻找并创建它所依赖的对象...

    Spring 三种依赖注入方式.doc

    Spring 三种依赖注入方式 Spring 框架中提供了多种依赖注入方式,其中最常用的三种依赖注入方式分别是接口注入、设值注入和构造函数注入。下面,我们将分别对这三种依赖注入方式进行详细的介绍和分析。 一、接口...

    Spring系列之依赖注入的三种方式.docx

    【Spring 依赖注入详解】 在 Spring 框架中,依赖注入(Dependency Injection,简称 DI)是一种关键的设计模式,它允许我们解耦组件之间的依赖关系,使得代码更加灵活,易于测试和维护。依赖注入的三种主要方式是:...

    Spring的依赖注入,与前置通知的实例

    在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它允许对象之间的耦合性降低,使得代码更易于测试和维护。依赖注入的核心思想是将一个对象依赖的其他对象通过构造函数、setter方法...

    java中spring依赖注入的简单例子

    javaEE 开发中 现在最成熟的框架之一应该就是spring了 spring框架最强大的地方就是实现了依赖注入 也叫控制反转 最近的一个项目中用的就是 spring框架 spring框架是工厂模式的应用结合了MVC的设计思想 大家可以...

    spring依赖注入的实现原理

    Spring依赖注入(Dependency Injection,简称DI)是Java应用开发中常用的设计模式,它极大地提高了代码的可测试性和可维护性。在Spring框架中,依赖注入是核心特性之一,通过控制反转(Inversion of Control,IoC)...

    Spring 核心机制(依赖注入)

    Spring框架作为一款优秀的轻量级Java应用开发框架,其核心理念之一就是依赖注入(Dependency Injection, DI)。依赖注入不仅能够帮助开发者降低代码间的耦合度,提高软件的可维护性和可扩展性,还能简化项目配置,...

    Spring.net(依赖注入应用)

    **Spring.NET 框架详解:依赖注入与应用实践** Spring.NET 是一个开源的企业级应用程序框架,它在.NET平台上实现了类似Java Spring的核心功能,其中包括了依赖注入(Dependency Injection,DI)这一重要设计模式。...

    第三章 Spring4 依赖注入

    Spring4的依赖注入是其核心功能之一,通过构造器、setter方法或属性注解实现。它提高了代码的可读性、可测试性和可维护性。在实际开发中,结合注解和XML配置,可以灵活应对各种复杂的依赖关系。理解并熟练运用依赖...

    模仿Spring依赖注入

    【Spring依赖注入详解】 在Java开发中,Spring框架以其强大的依赖注入(Dependency Injection,简称DI)功能而闻名。依赖注入是一种设计模式,它允许我们解耦组件,使我们的应用程序更加灵活,易于测试和维护。本篇...

    spring依赖注入三种方式 测试源码

    通过阅读和理解这些源码,你可以更深入地了解Spring依赖注入的工作原理及其在项目中的具体使用。 在进行依赖注入时,Spring使用BeanFactory或ApplicationContext作为容器,负责创建、管理和装配Bean。容器读取配置...

    Spring依赖注入的方式

    在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它使得对象之间的耦合度降低,提高了代码的可测试性和可维护性。本文将深入探讨Spring中的依赖注入方式,包括构造器注入、设值注入...

    spring依赖注入例子

    Spring框架的依赖注入(Dependency Injection,简称DI)是其核心特性之一,它使得对象之间的关系在运行时由Spring容器管理,而不是硬编码在类内部。这样可以提高代码的可测试性和可维护性,因为对象的依赖关系变得松...

    详解Spring基于Annotation的依赖注入实现

    Spring的核心特性之一就是依赖注入,它通过在运行时自动配置对象及其依赖关系,极大地简化了Java应用程序的开发过程。 ### 依赖注入(DI) 依赖注入是一种设计模式,用于减少代码之间的耦合度。在传统的编程方式中...

Global site tag (gtag.js) - Google Analytics