举例:项目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/>标签中用于指定参数的属性有:
另外,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等效得注解:
之因此建立这三个功能与@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共同使用