spring(一) IOC讲解

一、什么是IOC?

    IOC:控制反转,通俗点讲,将对象的创建权交给spring,我们需要new对象,则由spring帮我们创建,然后供我们使用。

    编写IOC的helloworld。简单的三步就搞定了

      1、导入jar包

          5个包,4个核心包,1个依赖包

              

              

      2、编写配置文件

          spring帮我们创建对象,但也必须有相关类的信息,不然怎么能够创建呢?

          配置文件名称:建议:ApplicationContext.xml,取别的也可以,但是取建议的名称的话,找到该配置文件更为简单,

          配置文件位置:任意,一般都在classpath下(src)

          文件约束内容:添加约束,spring-framework-3.2.0.RELEASE 为spring的核心  docs为帮助文档

               约束位置:spring-framework-3.2.0.RELEASE\docs\spring-framework-reference\html\xsd-config.html

              

                    

                

      3、从spring容器中获取对象

            

    

        UserService.java              

              

二、依赖注入(DI)

      现在应该知道了什么是IOC,helloworld很简单吧,但spring如果只提供这么一个简单的功能,就不能被大家那么所崇拜了,上面只是把IOC这个功能给大家简单展示一下,让大家脑海中有IOC是干什么的,能做什么的概念,现在就对其进行加强把。

      依赖注入(DI):spring创建对象A时,会将对象A所依赖的对象B也创建出来,并自动注入到对象A中。

              依赖:(has a) 有一个的意思,比如类A中有一个类B,那么就说A依赖B。          继承,实现(is a)

                                  

              而我们说的依赖注入,就是当创建A对象时,同时会将B对象给创建,并自动注入到对象A中去,也就说,我只叫spring给我A对象,但是A中可以使用B对象了。这个有很大的用处,但如何去实现依赖注入功能呢?

            

            

        UserService中有使用userDao对象,这个我们都很熟悉的使用伎俩,service层调用dao层的方法。按照往常我们的写法,在service中需要自己new出UserDao对象,但是在spring中就不需要了,一切对象都让spring帮我们创建。

        ApplicationContext.xml

            

        过程就如图中所画,先创建UserService对象,然后在根据property中的ref找到userDaoId并创建UserDao对象,然后根据property中的name,通过setter方法注入,这样就完成了依赖注入。

       测试:

          

      

三、spring创建实例对象的三种方法

       因为并不是每个bean都是普通类,有些是通过工厂来获取的,而工厂就有静态工厂和实例工厂,所以spring创建实例对象有三种情况,

       默认无参构造,就是编写IOC的helloworld的那种方式,直接<bean id="" class="">

       静态工厂:由于是静态工厂,所以通过工厂类直接调用创建实例的方法就可以了。

            <bean id="" class="工厂全限定类名" factory-method="静态方法">

       实例工厂:需要先创建出工厂实例,然后在由工厂创建对象

            <bean id="myFactoryId" class="工厂全限定类名"></bean>

            <bean id="" factory-bean="myFactoryId"  factory-method=""></bean>

      

四、属性依赖注入基于XML

       之前讲的那个依赖注入其实也属于属性依赖注入这一范畴中,在最开始我们演示IOC(控制反转)也就是spring帮我们创建实例时,那只是通过无参构造方法进行创建,那么在实际开发中,这样创建肯定是不行的,所以我们需要在spring的配置文件中配置一些属性信息,使spring帮我们创建时,可以直接将对象的一些属性也注入进去,有两种方法

       通过构造方法注入

              

          不管是普通属性还是引用数据,都可以通过构造方法进行注入。

       通过setter方法进行注入

               

           通过setter方法对普通属性和引用属性进行注入,那么要是创建的对象中有集合呢?那该如何进入注入?

         集合的注入List、Map、Set、数组、Properties等。

           List

                

           set

              

            map

              

           数组

              

           propertyis

              

            注意:properties这种类型存放形式跟map差不多,以key和value进行存放的,

                  

      到这里,基本上就把所有能够注入的属性类型都讲解完了,注入的类型基本上分为三块,普通类型,引用类型和集合。下面在讲一种基于注解来注入各种,因为基于xml感觉很麻烦。

五、属性依赖注入基于注解

      注解格式:@xxx

      使用注解:必须对使用注解的地方进行扫描,不然注解没用。而扫描需要做两件事

          1、添加名称空间,

              在我们找配置文件中约束的位置那:spring-framework-3.2.0.RELEASE\docs\spring-framework-reference\html\xsd-config.html 找到context的名称空间。

              

                       

          2、扫描指定的目录,

                  

     注解:

        1、@Component  替代  <bean id="" class=""> 可以配置任意bean,在所在类上面添加该注解即可,

                @Component("userId") userId相当于bean中的id属性值

                 

        2、  这三个就跟使用@Component是一样的,但是为了更好的体现三层架构,就有了这三个注解

         @Controller  修饰web层中的类。

         @Service  修饰service层的类

         @Repository  修饰dao层的类

            两种方式,一种不声明名称,一种声明名称

            @Controller("xxx")  @Controller  

            如果声明了名称,那么在别的地方引用的话,就可以使用@Autowired或@Autowired与@Qualifier的组合 或直接使用@Resource按照名称注入

            如果没有声明名称,那么在别的地方引用的话,只能使用@Autowired 来进行注入

       3、属性注入

         普通属性

            @Value    @Value("")  给普通属性注入属性值

          引用属性

              @Autowired  按默认类型进行注入

              @Qualifier("") 按照名称注入  

            如果使用了@Qualifier这个注解,那么就需要两个一起使用才能生效。如果只使用@Autowired,那么写不写@Qualifier都可以

          引用属性

            @Resource  直接按照名称注入,与上面两个注解一起使用是等效的  

                @Resource(name="xxx")

             

       4、使用

           

                       

       5、其他注解

           @Scope("prototype")  作用域注解(spring帮我们创建的bean实例的作用域,在下面会讲解到)

           @PostConstruct  修饰初始化    

           @PreDestory  修饰销毁      

                最后两个用的不多,掌握前面的即可。

      

六、spring创建的bean的作用域  

      也就是spring帮我们创建的bean的使用范围。

      格式:<bean id="" class=""  scope="....">

      取值:

            

      掌握前两个,singleton 和prototype

          singleton:单例,也就是当spring通过xml配置文件帮我们创建一个bean对象时,那我们拿到的就一直是同一个对象,仅存在一个那样的bean实例。默认值

                

              

          prototype:每次我们需要bean实例时,都会创建一个新的实例。

                

              

七、编写applicationcontext.xml提示问题

         五步即可解决

         第一步:spring的核心jar中找到Scheme xsd文档

              spring-framework-3.2.0.RELEASE\schema\beans\spring-beans-3.2.xsd

              

         第二步:从xml配置文件中,获取xsd文档位置,复制....spring-beans.xsd

              

         第三步:window/preferences/ 搜索 “xml catalog”

                

        第四步:

              

        第五步:

              

        

            注意:如果xml没有提示,关闭xml重写打开。

八、总结

      spring的第一个重点IOC,就这样讲完了,其实看完之后非常简单,就是让spring给你创建对象,你想要对象的时候,就找spring,让他给。

      学的东西有:

          什么是IOC,什么是依赖注入。

          之后对依赖注入进行详细的讲解。

                使用xml方式和使用注解方式

      说简单点,这一节就是学会了通过配置,让spring帮我们创建我们想要的bean。



  转自 http://www.cnblogs.com/whgk/p/6616593.html 如有侵权,随时联系我删除文章。

时间: 2024-10-12 21:12:02

spring(一) IOC讲解的相关文章

Spring之IOC讲解

一.SpringIOC的好处: ioc的思想最核心的地方在于,资源不由使用资源的双方管理,而由不使用资源的第三方管理,这可以带来很多好处. 1.资源集中管理,实现资源的可配置和易管理. 2.降低了使用资源双方的依赖程度,也就是我们说的耦合度. 一.SpringIOC的核心思想: 例子说明: 也就是说,甲方要达成某种目的不需要直接依赖乙方,它只需要达到的目的告诉第三方机构就可以了,比如甲方需要一双袜子,而乙方它卖一双袜子,它要把袜子卖出去,并不需要自己去直接找到一个卖家来完成袜子的卖出.它也只需要

spring的IOC和AOP详细讲解

1.解释spring的ioc? 几种注入依赖的方式?spring的优点? IOC你就认为他是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是有这个IOC容器进行产生,同时,要是产生的是单例的bean,他还可以给管理bean的生命周期! spring的IOC有三种注入方式 : 第一是根据属性注入 也叫set方法注入: 第二种是根据构造方法进行注入: 第三种是根据注解进行注入,这种方式我认为比较好,方便,要是bean多的话,使用前两种方式会使得配置文件过于臃肿. Spri

Spring之IOC容器注入

上一篇做了IOC和AOP的原理介绍,这一篇主要讲解IOC的注入.不过我依然困惑一个问题: 一 : 依赖注入(DI)中有三种注入方式,那Spring中到底实现了几种方式?也是三种? IOC在很多框架中都有实现,并不是Spring特有的,之前说过IOC主要包含DL(Dependency Lookup)和DI(Dependency Injection),也就是说实现IOC的技术有很多,但是主要包含DI和DL,但是相对而言,DI应用范围比较广泛,我想这也是为什么Martin Fowler将控制反转用依赖

Spring的Ioc

引用:http://www.cnblogs.com/xdp-gacl/p/4249939.html 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解. 一.分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spring框

【SSH进阶之路】Spring的IOC逐层深入——源码解析之IoC的根本BeanFactory(五)

我们前面的三篇博文,简单易懂的介绍了为什么要使用IOC[实例讲解](二).和Spring的IOC原理[通俗解释](三)以及依赖注入的两种常用实现类型(四),这些都是刚开始学习Spring IoC容器时的基础内容,当然只有有了这些基础,我们才能走到今天更加详细的解析Spring的源码,深入理解IOC. 这篇我先简单的复习一下IoC,然后根据实例介绍IoC最基本的原理.废话少说,下面我们开始这篇博文的话题: 什么是IoC IoC容器,最主要的就是完成对象的创建以及维护对象的依赖关系等. 所谓控制反转

深入解析spring的IOC和DI

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">在此之前先说一下没有</span><span style="font-family: 'Times New Roman'; background-color: rgb(255, 255, 255);">spring</span>&l

【Spring】IOC之基于Java类的配置Bean

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 基于Java配置选项,可以编写大多数的Spring不用配置XML,但有几个基于Java的注释的帮助下解释.从Spring3.0开始支持使用java代码来代替XML来配置Spring,基于Java配置Spring依靠Spring的JavaConfig项目提供的很多优点.通过使用@Configuration, @Bean ,@Importand,@DependsOnannotations来实现J

Spring的IOC理解(转载)

学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解. 一.分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinniansh

对Spring中IOC和DI的理解

前几篇讲了Spring中IOC和DI的用法,本篇应该放到三篇之前,但一直没有想到好的讲解方式,后参考https://blog.csdn.net/luoyepiaoxue2014/article/details/72426666博客,对其中涉及到的进行了简单的总结. 在学习Spring的过程中,总会涉及到两个概念---IOC和DI,即控制反转和依赖注入,而对这两个概念的理解也总是含糊不清的,下面就对自己的理解进行总结. 首先是IOC,即控制反转,需要理解的是:怎么控制?谁控制了什么?怎么反转?既然