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

开源框架Spring详解---IoC的深刻理解

阅读更多

开源框架Spring详解---IoC的深刻理解

 

作者:z_xiaofei168 

       有一段时间没有接触spring了,感觉有点陌生了,今天总结了一下关于IoC的一些知识点,虽然是学过spring了,但是如果不经常使用,知识点是连接不起来的。所以今天我特意做了这个总结。相信对大家有一定的帮助。以便我们可以共同学习,共同进步。 

Ioc的理解

         1、依赖注入的概念

         spring两个核心概念:一个是控制反转IoC,也可以叫做依赖注入DI。还有一个是面向切面编程AOP

         控制反转:当某个java对象需要(依赖)另一个java对象时,不是自身直接创建依赖对象,而是由实现IoC的容器(如spring框架的IoC容器)来创建,并将它注入需要这个依赖对象的java对象中。

         2spring的依赖注入

 

                   2.1、构造器注入

                   <bean id="accoutDaoImpl" class="cn.csdn.dao.AccoutDaoImpl" scope=”singleton”/>

                   <bean id="accoutServicImpl" class="cn.csdn.service.AccoutServicImpl" scope=”">

                            <!-- 构造器注入方式 -->

                            <constructor-arg ref="accoutDaoImpl"/>

                   </bean>

 

                   2.2、设值(set方法)注入

                   <bean id="accountDaoImpl" class="cn.csdn.dao.AccoutDaoImpl"/>

                   <bean id="accoutServicImpl" class="cn.csdn.service.AccoutServicImpl">

                            <!-- 设值(set方法)注入 -->

                            <property name="accountDaoImpl" ref="accoutDaoImpl"/>

                   </bean>

         3spring的容器

         spring管理的基本单元是Bean,在spring的应用中,所以的组件都是一个个的Bean,它可以是任何的java对象。spring负责创建这些Bean的实例。并管理生命周期。而spring框架是通过其内置的容器来完成Bean的管理的,Beanspring的容器中生存着,使用时只需要通过它提供的一些方法从其中获取即可

 

         spring的容器有两个接口:BeanFactory  ApplicationContext 这两个接口的实例被陈为spring的上下文。

 

         ApplicationContext ac = new ClassFathXmlApplicationContext("app*.xml");

         AccountService accountService = (AccountService)ac.getBean("accountServiceImpl");

         4、使用xml装配Bean

                   4.1、装配Bean

                            id:指定该Bean的唯一标识。

                            class:指定该Bean的全限定名。

                            name:为该Bean指定一到多个别名。多个别名可以用“,”和“;”分割。

                            autowire:指定该Bean的属性的装配方式。

                            scope:指定该Bean的存在。

                            init-method:指定该Bean的初始化方法。

                            destroy-method:指定该Bean的销毁方法。

                            abstract:指定该Bean是否为抽象的。如果是抽象的,则spring不为它创建实例。

                            parent:指定该Bean的父类标志或别名。

                   4.2、装配Bean的各种类型属性值

 

                            1>.简单类型属性值的装配

                            <bean id="bean1" class="cn.csdn.domain.Bean1">

                                     <property name="name" value="z_xiaofei168"/>

                                     <property name="age">

                                               <value>22</value>

                                     </property>

                            </bean>

 

                            2>.引用其他Bean的装配

                            <bean id="bean1" class="cn.csdn.domain.Bean1">

                                     ...

                            </bean>

                           

                            <bean id="bean2" class="cn.csdn.domain.Bean2">

                                     <!-- 引用自其他Bean的装配 -->

                                     <property name="bean1" ref="bean1"/>

                            </bean>

                            另外一种不常使用的配置方式是在property元素中嵌入一个bean元素来指定所引用的Bean.

                            <bean id="bean1" class="cn.csdn.domain.Bean1">

                                     ...

                            </bean>

                            <bean id="bean2" class="cn.csdn.domain.Bean2">

                                     <!-- 引用自其他Bean的装配 -->

                                     <property name="bean1">

                                               <bean id="bean1" class="cn.csdn.domain.Bean1"/>

                                     </property>

                            </bean>

                  4.3、自动装配

 

                            no:不使用自动装配。必须通过ref元素指定依赖,这是默认设置。由于显式指

 

定协作者可以使配置更灵活、更清晰,因此对于较大的部署配置,推荐采用该设置。而且在某种程度上,它也是系统架构的一种文档形式。

                            <bean id="bean1" class="cn.csdn.service.Bean1" scope="singleton">

                                     <property name="studentDaoImpl" ref="studentDaoImpl">

                                     </property>  

                            </bean>

                            备注:有property属性  指定ref

 

                            byName:根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。例如,在bean定义中将autowire设置为by name,而该bean包含master属性(同时提供setMaster(..)方法),Spring就会查找名为masterbean定义,并用它来装配给master属性。

                            <bean id="bean1" class="cn.csdn.service.Bean1" scope="singleton" autowire="byName"/> 

                            备注:没有property属性 

 

                            byType:如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。如果你不希望这样,那么可以通过设置dependency-check="objects"Spring抛出异常。

备注:spring3.0以上不抛异常。

                            <bean id="bean1" class="cn.csdn.service.Bean1" scope="singleton" autowire="byType"/> 

                            备注:没有property属性

 

                            Constructor:byType的方式类似,不同之处在于它应用于构造器参数。如果

在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常

                            <bean id="bean1" class="cn.csdn.service.Bean1" scope="singleton" autowire="constructor"/> 

                            备注:没有property属性

 

                            autodetect:通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方式。

                            <bean id="bean1" class="cn.csdn.service.Bean1" scope="singleton" autowire="autodetect"/>

 

                  4.4、指定Bean的存在范围

                            singleton:在每个Spring IoC容器中一个bean定义对应一个对象实例。这是默认值

                            prototype:每次对Bean请求时都会创建一个Bean定义对应一个实例。一个Bean定义多个实例。

                            request:在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例, 它们依据某个bean定义创建而成。该作用域仅在基于webSpring ApplicationContext情形下有效。

                            session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于webSpring ApplicationContext情形下有效。

                            global_session:在一个全局的HTTP Session中,一个bean定义对应一个实例。

 

典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于webSpring ApplicationContext情形下有效。

 

                   4.5、指定Bean的初始化和销毁

                            Spring可以管理Bean实例在实例化结束之后和被销毁之前的行为。通过propertyinit-method属性可以指定某个方法应该在Bean全部依赖关系设置结束后自动执行;通过propertydestroy-method属性可以指定某个方法应该在Bean被销毁之前自动执行。

                            public class Bean{

                            public String name;

                            public Bean(){

                            system.out.println(“调用默认构造方法”);

}

public void setName(){

         system.out.println(“执行setName()方法”);

         this.name=name;

}

public String getName(){

         return name;

}

public void init(){

         system.out.println(“执行初始化方法”);

}

public void destroy(){

         system.out.println(“执行销毁方法”);

}

}

 

配置文件

<bean id=”bean1” class=”cn.csdn.service.Bean1” scope=”singleton” init-method=”init” destroy-method=”destroy”>

         <property name=”name” value=”z_xiaofei168/>”

</bean>

 

执行结果:

调用默认构造方法

执行setName()方法

执行初始化方法

                   4.6、装配Bean的继承

                            如果两个Bean的属性装配信息很相似,那么可以利用继承来减少重复的配置工作。

                            <!-- 装配Bean的继承

父类作为模板,不需要实例化,设置abstract=”true”-->

         `                 <bean id=”parent” class=”cn.csdn.service.Parent” abstract=”true”>

                            <property name=”name” value=”z_xiaofei168”/>

<property name=”pass” value=”z_xiaofei168”/>

</bean>

<!-- 装配Bean的继承

子类中用parent属性指定父类标识或别名 

子类可以覆盖父类的属性装配,也可以新增自己的属性装配-->

         `                 <bean id=”child” class=”cn.csdn.service.Chlid” parent=”parent”>

                            <property name=”pass” value=”123123”/>

<property name=”age” value=”22”/>

</bean>

 

6
13
分享到:
评论

相关推荐

    spring框架:spring-framework-4.3.9.RELEASE-dist

    1. **Core Container**:包含Bean工厂和核心IoC服务,是Spring框架的基础。 2. **Data Access/Integration**:提供对JDBC、JPA、Hibernate等数据访问技术的支持。 3. **AOP**:提供面向切面的编程实现,用于实现如...

    官方完整包 spring-framework-5.3.7.RELEASE-dist.zip

    Spring Framework 是一个开源的应用程序框架,它主要针对Java平台,为构建企业级应用提供了全面的解决方案。5.3.7.RELEASE是Spring Framework的一个稳定版本,包含了一系列的增强功能和性能优化。本压缩包“spring-...

    spring2.5 -3.0 hibernate3.3 jar包说明

    Spring是一个开源的应用框架,它提供了一个全面的编程模型,旨在简化Java应用程序的开发过程。Spring的核心功能包括依赖注入(Dependency Injection, DI)、面向切面编程(Aspect Oriented Programming, AOP)、事务...

    spring-framework-4.0.0.RELEASE官方完整包

    Spring Framework是一款开源的应用框架,主要目标是简化Java EE应用程序的开发。它提供了AOP(面向切面编程)、IOC(控制反转)和DI(依赖注入)等关键特性,极大地提高了代码的可测试性和模块化程度。Spring 4.0.0....

    spring4-hibernate4-struts2整合

    **Spring4** 是一个开源的轻量级Java开发框架,旨在简化企业级应用的开发过程。它提供了强大的IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)功能,支持多种模块化设计...

    spring-framework-3.0.RELEASE

    Spring框架作为Java领域中最受欢迎的轻量级开源框架之一,其3.0版本的发布标志着一个重要的里程碑。本文将深入探讨Spring框架3.0的核心特性、主要改进以及如何使用其中的jar包。 一、Spring框架概述 Spring框架以...

    java-spring教程-全面理解

    - **定义**: Spring是一个开源框架,旨在简化企业级应用的开发。 - **功能定位**: 既可以被视为一个容器(负责管理对象的生命周期),也可以被视为一个框架(提供基础设施支持)。 - **特点**: 轻量级、非侵入式。 -...

    spring-mybatis-spring-3.0.1.zip

    《Spring与MyBatis整合详解及资源包下载指南》 在Java开发领域,Spring框架以其强大的功能和灵活性,成为企业级应用开发的首选。而MyBatis作为一个优秀的持久层框架,以其简洁高效的SQL操作和对象关系映射能力,...

    spring-framework-3.0.5.RELEASE-dependencies3

    在Java开发领域,Spring框架无疑是最具影响力和广泛使用的开源框架之一。本文将深入探讨Spring Framework 3.0.5.RELEASE版本中的核心依赖,以及这些依赖在实际应用中的作用。由于文件大小限制,该版本的依赖被分成了...

    spring jar 包详解

    Spring 是一个开源的 Java 开发框架,主要用于简化企业级应用的开发工作。它通过提供一系列的基础框架,使得开发者能够更容易地处理复杂的业务逻辑,并且提高了代码的可维护性和可测试性。Spring 提供了多种不同的 ...

    spring-mybatis-spring-1.2.4.zip

    Spring是一个开源的Java平台,它提供了一个全面的企业级应用开发框架,包括依赖注入、面向切面编程(AOP)、事务管理等功能。其核心设计理念是通过IoC(控制反转)和DI(依赖注入)简化对象的创建和管理,使得代码...

    spring-web.jar

    `springframework-license.txt`文件包含了Spring框架的许可证信息,表明了Spring源码的使用和分发条件,遵循Apache License 2.0,鼓励开源和协作。 总结,`spring-web.jar`是Spring框架不可或缺的一部分,它提供了...

    spring jar 包

    Spring框架作为Java领域最广泛使用的轻量级开源框架,以其模块化、松耦合的设计理念赢得了广大开发者的青睐。在提供的压缩包中,包含了Spring框架4.3.9版本的核心组件,以及一个依赖库——Apache Commons Logging ...

    spring-framework-reference.pdf

    ### Spring Framework核心知识点详解 #### 一、Spring框架概述 **Spring Framework** 是一个开源的Java...通过对这些核心知识点的学习,开发者能够更好地理解和利用Spring框架的各种特性,提高开发效率和软件质量。

    spring-mybatis-spring-2.0.6.zip

    Spring是一个开源的企业级Java应用框架,由Rod Johnson创建,旨在简化企业级应用开发。它提供了控制反转(IoC)和面向切面编程(AOP),使得开发者可以将注意力集中在业务逻辑上,而不是繁琐的依赖管理和事务处理。...

    Spring-Framework-5.2.x Maven版本

    Spring Framework是Java开发中不可或缺的开源框架,它为构建高效、灵活且可测试的Java应用程序提供了基础。5.2.x是其一个重要的版本,引入了许多新特性和改进。在这个版本中,Spring Framework与Maven集成,使得...

    spring框架技术详解及使用指导(电子书PDF)

    在阅读“spring框架技术详解及使用指导”时,你可能会学到如何配置Spring IoC容器,如何使用注解进行依赖注入,如何编写AOP切面,以及如何利用Spring MVC构建RESTful Web服务。此外,书中可能还会涵盖Spring Boot的...

    spring-mybatis-spring-1.3.3.zip

    Spring框架则是一个开源的应用框架,它是为了解决企业应用开发的复杂性而创建的。Spring框架的核心特性可以用来构建其他应用,也提供了大量的功能,包括AOP(面向切面编程)、DI(依赖注入)、MVC(模型-视图-控制器...

    spring-framework-4.3.14.RELEASE

    Spring Framework是Java平台上的一个全面的开源应用程序框架,它提供了一个用于构建企业级应用的基础架构。4.3.14.RELEASE是该框架的一个重要版本,它包含了众多的改进和修复,确保了系统的稳定性和性能。 2. **...

Global site tag (gtag.js) - Google Analytics