spring学习(一) ———— IOC讲解

spring基本就两个核心内容,IOC和AOP。把这两个学会了基本上就会用了。

                    --WH

一、什么是IOC?

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

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

      1、导入jar包

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

              

            spring学习(一) ———— IOC讲解  

      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

              spring学习(一) ———— IOC讲解

                   spring学习(一) ———— IOC讲解 

                

      3、从spring容器中获取对象

            spring学习(一) ———— IOC讲解

    

        UserService.java              

              spring学习(一) ———— IOC讲解

二、依赖注入(DI)

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

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

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

                  spring学习(一) ———— IOC讲解                

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

            spring学习(一) ———— IOC讲解

            spring学习(一) ———— IOC讲解

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

        ApplicationContext.xml

            spring学习(一) ———— IOC讲解

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

       测试:

          spring学习(一) ———— IOC讲解

      

三、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帮我们创建时,可以直接将对象的一些属性也注入进去,有两种方法

       通过构造方法注入

          spring学习(一) ———— IOC讲解    

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

       通过setter方法进行注入

           spring学习(一) ———— IOC讲解    

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

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

           List

             spring学习(一) ———— IOC讲解   

           set

              spring学习(一) ———— IOC讲解

            map

              spring学习(一) ———— IOC讲解

           数组

              spring学习(一) ———— IOC讲解

           propertyis

              spring学习(一) ———— IOC讲解

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

                  spring学习(一) ———— IOC讲解

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

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

      注解格式:@xxx

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

          1、添加名称空间,

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

              spring学习(一) ———— IOC讲解

                  spring学习(一) ———— IOC讲解     

          2、扫描指定的目录,

                  spring学习(一) ———— IOC讲解

     注解:

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

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

                spring学习(一) ———— IOC讲解 

        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、使用

           spring学习(一) ———— IOC讲解

                       

       5、其他注解

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

           @PostConstruct  修饰初始化    

           @PreDestory  修饰销毁      

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

      

六、spring创建的bean的作用域  

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

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

      取值:

          spring学习(一) ———— IOC讲解  

      掌握前两个,singleton 和prototype

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

                spring学习(一) ———— IOC讲解

              spring学习(一) ———— IOC讲解

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

                spring学习(一) ———— IOC讲解

              spring学习(一) ———— IOC讲解

七、编写applicationcontext.xml提示问题

         五步即可解决

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

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

              spring学习(一) ———— IOC讲解

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

              spring学习(一) ———— IOC讲解

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

              spring学习(一) ———— IOC讲解  

        第四步:

              spring学习(一) ———— IOC讲解

        第五步:

              spring学习(一) ———— IOC讲解

        

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

八、总结

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

      学的东西有:

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

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

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

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

上一篇:python trie


下一篇:DES加密模式详解