(三)基于XML的DI

举例:项目di编程

一、注入分类数组

  Bean实例在调用无参构造器建立了空值对象后,就要对Bean的属性进行初始化。初始化是由容器自动完成的,称为注入。根据注入方式的不一样,经常使用的由有两类:设值注入、构造注入。测试

  还有另一种,实现特定接口注入。因为这种方式采用侵入式编程,污染了代码,因此几乎不用。 ui

 (1)设值注入spa

   设值注入是指,经过setter方法传入被调用者的实例。这种注入方式简单、直观,于是Spring的依赖注入中大量使用。3d

  举例:di01_1包对象

  

  当指定bean的某属性值为另外一bean的实例时,经过ref指定它们间的引用关系。ref的值必须为某bean的id值。blog

  

  

  对于其它Bean对象的引用,除了<bean/>标签的ref属性外,还可使用<ref/>标签。继承

(2)构造注入接口

  构造注入是指,在构造者调用者实例的同时,完成被调用者的实例化。即便用构造器设置依赖关系。

  举例:di01——2包

  

  

  <constructor-arg/>标签中用于指定参数的属性有:

  • name:指定参数名称
  • index:指明该参数对应着构造器的第几个参数,从0开始。不过,该属性不要不行,但要注意,若参数类型相同,或之间有包含关系,则须要保证赋值顺序要与构造器中的参数顺序一致。

  另外,type属性可用于指定其类型。基本类型直接写类型关键字便可,非基本类型须要写全限定性类名。

二、命名空间注入(了解)

三、集合属性注入

  举例:di03包

  

 (1)为数组注入值

  

 (2)为List注入值

  

 (3)为Set注入值

  

 (4)为Map注入值

  (5)为Properties注入值

四、对于域属性的自动注入  

  对于域属性的注入,也可不在配置文件中显示注入。能够经过为<bean/>标签设置autowire属性值,为域属性进行隐式自动注入。根据自动注入判断标准的不一样,能够分为两种:

  byName:根据名称自动注入

  byType:根据类型自动注入

(1)byName方式自动注入

    当配置文件中被调用者Bean的id值与代码中调用者Bean类的属性名相同时,可以使用byName方式,让容器自动将被调用者Bean注入给调用者Bean。容器是经过调用者的Bean类的属性名与配置文件的被调用者bean的id进行比较而实现自动注入的。

  举例:di04——1包

  

  

(2)byType方式自动注入

  使用byType方式自动注入,要求:配置文件中被调用者bean的class属性指定的类,要么代码中调用者Bean类的某域属性类型同源。即要么相同,要么is-a关系(子类,或是实现类)。但这样的同源的被调用bean只能有一个。多于一个,容器就不知道该匹配哪个了。

  举例:di04_2包

  

五、使用SPEL注入

  SPEL,即Spring EL表达式语言。即在Spring配置文件中为Bean的属性注入值时,可直接使用SPEL表达式计算的结果。SPEL表达式以#开头,后根一对大括号。

  举例:di05包

  

  

其它用法:  
(1) <property name=“school” value=“#{mySchool}”/> 
    引用另外一个bean。指定school的值为另外一个Bean实例mySchool。

 

 六、使用内部Bean注入
  若不但愿代码直接访问某个bean,即,在代码中经过getBean方法获取该Bean实例, 则可将该Bean的定义放入调用者bean定义的内部。
  举例:di06包
        

 七、使用同类抽象Bean注入

  当若干Bean实例同属一个类,且这些实例的属性值又有相同值时,可使用抽象Bean,以简化配置文件。

  抽象Bean是用于让其余bean继承的。这个bean在Bean类中是不能经过getBean方法获取的。设置abstract属性为true来指明该bean为抽象bean,默认值为false。不过,该bean不为抽象bean时,也可被继承。只不过,在应用中,用于被继承的bean通常为抽象bean。

  举例:di07包

  

八、使用异类抽象Bean注入

  当若干不一样的类对象具备相同的属性,且其值也相同时,可以使用异类抽象Bean。

  举例:di08包

  

九、为应用指定多个Spring配置文件

  在实际应用里,随着应用规模的增长,系统中Bean数量也大量增长,致使配置文件变得很是庞大、臃肿。为了不这种状况得产生,提升配置文件得可读性与可维护性,能够将Spring配置文件分解成多个配置文件。

(1)以配置文件数组方式实现

  将全部配置文件的路径定义为一个String数组,并将其做为容器初始化参数出现。其将与可变参的容器构造器匹配。

        

    各配置文件间为并列关系,不分主次。

    举例:di09_01

    

    

(2)以父子配置文件方式实现

  各配置文件中有一个总文件,总配置文件将各其它子文件经过<import/>引入。在Java代码中只须要使用总配置文件对容器进行初始化便可。

   举例:di09_02

5、基于注解得DI

  举例:di-annotation项目

  对于DI使用注解,将再也不须要在Spring配置文件中声明Bean实例。Spring中使用注解,须要在原有Spring运行环境基础上再作一些改变,完成如下三个步骤。

  (1)导入AOP得jar包。由于注解得后台实现用到了AOP编程。

    

  (2)须要更换配置文件头,即添加相应得约束。

  (3)须要在Spring配置文件中配置组件扫描器,用于在指定得基本包中扫描注解。

                 

  一、定义Bean@Component

    须要在类上使用注解@Component,该注解得value属性用于指定该bean得id值。

    举例:di01

    

    另外,Spring还提供了3个功能基本和@Component等效得注解:

  • @Repository   用于对DAO实现类进行注解
  • @Service 用于对Service是实现进行注解
  • @Controller 用于对Controller实现类进行注解

  之因此建立这三个功能与@Componenet等效得注解,是为了之后对其进行功能上得扩展,使它们不在等效。

二、Bean得做用域@Scope

  须要在类上使用注解@Scope,其value属性用于指定做用域。默认为sigleton。

  举例:di01

  

三、基本类型属性注入@Value

  须要在属性上使用注解@Value,该注解得value属性用于指定要注入得值。

  使用该注解完成属性注入时,类中无需setter。固然无需setter。固然,若属性有setter,则也可将其加到setter上。

  举例:di01

  

四、按类型注入域属性@Autowired

  须要在域属性上使用注解@Autowired,该注解默认使用按类型自动装配Bean的方式。

  使用该注解完成属性注入时,类中无需setter。固然,若属性有setter,则也可将其加到setter上。

  举例:di02

  

五、按名称注入域属性@Autowired与@Qualifier

  须要在域属性上联合使用@Autowired与@Qualifier。@Autowired的value属性用于指定要匹配的Bean的id值。一样类中无需setter,也可加到setter上。

  举例:di03

  

  @Autowired还有一个属性required,默认值为true,表示当匹配失败后,会终止程序运行。若将其值设置为false,则匹配失败,将被忽略,未匹配的属性值为null。

  

六、域属性注解@Resource

  Spring提供对规范中定义@Resource标准注解的支持。@Resource注解便可以按名称匹配Bean,也能够按类型匹配Bean。使用该注解,要求JDK必须是6及以上版本。

(1)按类型注入域属性

  @Resource注解若不带任何参数,则会按照类型进行Bean的匹配注入。

  举例:di04

      

(2)按名称注入域属性

  @Resource注解指定其name属性,则name的值即为按照名称进行匹配的Bean的id。

  举例:di05

  

七、Bean的生命始末@PostConstruct与@PreDestory

  在方法上使用@PostConstructuct,与原来的init-method等效。在方法上使用@PreDestory,与destory-method等效。

  举例:di05

  

八、使用JavaConfig进行配置(了解)

  JavaConfig,是在Spring3开始从一个独立的项目并入到Spring中的。

九、使用juit4测试Spring(了解)

十、注解与XML共同使用

相关文章
相关标签/搜索