首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Spring 入门 DI依赖注入(二)

2014-01-14 
Spring 入门 DI依赖注入(2)(1)Spring中依赖注入如何理解?所谓依赖注入简单来说就是给对象赋值,只不过这个

Spring 入门 DI依赖注入(2)
(1)Spring中依赖注入如何理解?
所谓依赖注入简单来说就是给对象赋值,只不过这个过程是交给Spring容器来完成。
Spring容器就好比一个超级智能电饭锅,就像我们用这个智能电饭锅做菜,只要告诉电饭锅今晚这个饭需要什么配料,智能电饭锅就会自动帮我们添加配料,我们只需要启动电饭锅即可。

(2)依赖(Dependency injection)注入的好处?
可以解耦,完全面向接口编程,由Spring容器来注入实现类实例,不需要在代码中出现实现类的组件。

(3)常用注解简单介绍

注解:   *  用来标识的   *  注解是用来标注类里的东西   *  注解不能单独存在,只能依附于类中的结构   *  jdk中经常用的几种注解:       @Target          ElementType              TYPE  类和接口              FIELD              METHOD              …          用于说明这个注解所标注的注解用在哪些地方       @Documented             是否出现在帮助文档       @Retention  作用范围            SOURCE  源代码            CLASS   源代码和class文件            RUNTIME  源代码、class文件、运行时   *  自定义注解       *   一个自定义注解必须有            @Target  说明这个注解标注在哪个部位            @Retention  说明注解的作用范围       *  @interface 说明是一个注解类       *  注解类中可以有属性             String value();   *  注解解析器       用来解析标注在类上的注解


(4)Spring依赖注入方式?
1.xml 配置 2.通过注解

(5)依赖注入注解解析器
工作原理:      当spring容器启动的时候,       ApplicationContext context = new             ClassPathXmlApplicationContext("cn/itcast/spring0401/di/                    annotation/applicationContext.xml");     spring容器会创建纳入spring容器管理的bean.分别为person和student;      spring容器会解析配置文件,会解析到<context:annotation-config>        </context:annotation-config>,会在纳入spring的bean范围内查找属性上是否存在      @Resource(name="student")          * 如果存在:              * 继续解析@Resource有没有name属性                  * 如果没有name属性                            就会在所属的属性上,把属性的名称解析出来。会让属性的名称和spring中的bean中的id                            进行匹配,如果匹配成功,则把spring容器中相应的对象赋值给该属性                                      如果匹配不成功,则按照类型进行匹配              *  @Resource有name属性                   就会解析name属性的值,把这个值和spring容器中的bean的id进行匹配                      * 如果匹配成功,则把spring容器中的相应的对象赋值给该属性                      * 如果匹配不成功,则直接报错                      * 如果不存在:                 不做任何事情                    xml和注解的写法:       xml:书写比较麻烦,但是效率比较高       注解:书写比较简单,但是效率比较低   注解的写法只适合引用


   <context:annotation-config></context:annotation-config>   <bean id="person" name="code">   原理:      *  类扫描的注解解析器包含了依赖注入的注解解析器      *  原理:          当启动spring容器的时候,             ApplicationContext context = new                      ClassPathXmlApplicationContext("cn/itcast/spring0401/                     scan/applicationContext.xml");         spring容器会加载配置文件,并且解析配置文件,就会解析到             *    类扫描的注解解析器,会在base-package包及子包中扫描所有的类         *  检查类上是否有@Compontent注解            *  如果有                *  @Compontent是否有value属性                    *  没有value属性                             则会把这个注解所在的类的类名的第一个字母变成小写,其余的不变当做bean的id                    *  如果有value属性                             则value属性的值就是bean的id             *  如果没有             *   类扫描注解解析完以后,所有的在base-package包及子包下的带有@Compontent注解的类就被纳入spring管理了             *   在纳入spring管理的类中扫描各个属性,看属性是否有@Resource,再根据这个注解的规则进行操作。                  *   扫描的次数:                         *  根据base-package包及子包进行扫描                         *  扫描纳入spring管理的所有的bean的属性                         *  属性的name的值和bean中的id进行匹配

<context:component-scan base-package="cn.itcast.spring0401.scan"></context:component-scan>

热点排行