spring(一) IOC讲解

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

                    --WZYjava

1、什么是IOC?web

    IOC:控制反转,通俗点讲,将对象的建立权交给spring,咱们须要new对象,则由spring帮咱们建立,而后供咱们使用。spring

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

      一、导入jar包架构

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

              

              

      二、编写配置文件测试

          spring帮咱们建立对象,但也必须有相关类的信息,否则怎么可以建立呢?spa

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

          配置文件位置:任意,通常都在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容器中获取对象

            

    

        UserService.java              

              

 

2、依赖注入(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方法注入,这样就完成了依赖注入。

       测试:

          

      

 

3、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>

      

4、属性依赖注入基于XML

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

       经过构造方法注入

              

          不论是普通属性仍是引用数据,均可以经过构造方法进行注入。

       经过setter方法进行注入

               

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

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

           List

                

           set

              

            map

              

           数组

              

           propertyis

              

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

                  

 

      到这里,基本上就把全部可以注入的属性类型都讲解完了,注入的类型基本上分为三块,普通类型,引用类型和集合。下面在讲一种基于注解来注入各类,由于基于xml感受很麻烦。

 

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

      注解格式:@xxx

      使用注解:必须对使用注解的地方进行扫描,否则注解没用。而扫描须要作两件事

          一、添加名称空间,

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

              

                       

          二、扫描指定的目录,

                  

 

     注解:

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

                @Component("userId") userId至关于bean中的id属性值

                 

 

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

         @Controller  修饰web层中的类。

         @Service  修饰service层的类

         @Repository  修饰dao层的类

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

            @Controller("xxx")  @Controller  

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

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

       三、属性注入

         普通属性

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

          引用属性

              @Autowired  按默认类型进行注入

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

            若是使用了@Qualifier这个注解,那么就须要两个一块儿使用才能生效。若是只使用@Autowired,那么写不写@Qualifier均可以

          引用属性

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

                @Resource(name="xxx")

             

       四、使用

           

                       

       五、其余注解

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

           @PostConstruct  修饰初始化    

           @PreDestory  修饰销毁      

                最后两个用的很少,掌握前面的便可。

      

6、spring建立的bean的做用域  

      也就是spring帮咱们建立的bean的使用范围。

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

      取值:

            

      掌握前两个,singleton 和prototype

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

                

              

          prototype:每次咱们须要bean实例时,都会建立一个新的实例。

                

              

 

7、编写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重写打开。

 

8、总结

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

      学的东西有:

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

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

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

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

相关文章
相关标签/搜索