第1章 Linux 简介
第2章 Linux 命令
第3章 开发相关

基于注解的 DI

 

举例:di-annotation 项目

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

(1)导入 AOP 的 Jar 包。因为注解的后台实现用到了 AOP 编程。

 

 

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

约束在 %SPRING_HOME%\docs\spring-framework-reference\html\xsd-configuration.html 文件中。

 

 

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

 

 

3-1)使用多个 context:component-scan 指定不同的包路径

 

 

3-2)指定 base-package 的值使用分隔符

分隔符可以使用逗号(,)分号(;)还可以使用空格,不建议使用空格。

逗号分隔:

 

 

分号分隔:

 

 

3-3)base-package 是指定到父包名

base-package 的值表是基本包,容器启动会扫描包及其子包中的注解,当然也会扫描到子包下级的子包。所以 base-package 可以指定一个父包就可以。

 

 

或者最顶级的父包

 

 

但不建议使用顶级的父包,扫描的路径比较多,导致容器启动时间变慢。指定到目标包和合适的。也就是注解所在包全路径。例如注解的类在 com.bjpowernode.beans 包中

 

 

定义 Bean 的注解@Component(掌握)

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

举例:di01

 

 

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

➢ @Repository 用于对 DAO 实现类进行注解

➢ @Service 用于对 Service 实现类进行注解

➢ @Controller 用于对 Controller 实现类进行注解

之所以创建这三个功能与@Component 等效的注解,是为了以后对其进行功能上的扩展。

@Component 不指定 value 属性,bean 的 id 是类名的首字母小写。

 

 

 

简单类型属性注入@Value(掌握)

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

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

举例:

 

byType 自动注入@Autowired(掌握)

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

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

举例:

 

 

byName 自动注入@Autowired 与@Qualifier(掌握)

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

举例:

 

 

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

 

 

JDK 注解@Resource 自动注入 (掌握)

Spring提供了对 jdk中@Resource注解的支持。@Resource 注解既可以按名称匹配Bean,也可以按类型匹配 Bean。默认是按名称注入。使用该注解,要求 JDK 必须是 6 及以上版本。

@Resource 可在属性上,也可在 set 方法上。

(1) byType 注入引用类型属性

@Resource 注解若不带任何参数,采用默认按名称的方式注入,按名称不能注入 bean,则会按照类型进行 Bean 的匹配注入。

举例:

 

 

(2) byName 注入引用类型属性

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

举例:

 

 

Bean 的生命始末@PostConstruct 与@PreDestroy(掌握)

在方法上使用@PostConstruct 与原来的 init-method 等效。在方法上使用@PreDestroy,与 destroy-method 等效。

举例:

 

 

注解与 XML 的对比

注解的好处是,配置方便,直观。但其弊端也显而易见:以硬编码的方式写入到了 Java代码中,其修改是需要重新编译代码的。

XML 配置方式的最大好处是,对其所做修改,无需编译代码,只需重启服务器即可将新的配置加载。

注解的特点是高效(代码少,没有配置文件的书写那么复杂),XML 配置方式的特点是灵活(无需修改源代码),

再有如果要使用的类不是自己编写的,没有源代码。那也使用不了@Compoent 等注解,此时使用 XML 进行配置 bean。

 

 

全部教程