在Spring配置文件中添加以下代码可以扫描指定包下所有标注@Component, @Repository, @Service, @Controller的POJO将其变为Spring容器管理的Bean
<context:component-scan base-package="com.kk.entity"/>
Spring3支持以下3种用于自动装配的注解
使用@Autowired自动装配
@AutoWired使用ByType的方式自动装配,此直接可以标注setter方法,构造器,甚至其他需要自动装配Bean的任意方法.例如为Computer装配Cpu
setter方法, 构造器, 任意方法
@AutoWired public void setCpu(Cpu cpu){ this.cpu = cpu; }
@Autowired public Computer(Cpu cpu){ this.cpu = cpu; }
@Autowired public void buyCpuForComputer(Cpu cpu){ this.cpu = cpu; }
使用@Autowired的错误
@Autowired @Qualifier("coreI7") //选择ID为coreI7的Bean private Cpu cpu;@Qualifier标注类,可以限定Bean的名字
@Qualifier("coreI7") public class Cpu { }
@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Qualifier public @interface CoreI7{ }用@CoreI7标注一个Cpu
@CoreI7 public class Cpu { }使用@Autowired注入Bean时用@CoreI7来限定
@Autowired @CoreI7 private Cpu cpu;
使用@Inject实现基于标准的自动装配
@Inject注解是JSR-330的核心部件,该注解几乎可以完全替换Spring的@Autowired注解,但是@Inject没有required属性,所以@Inject标注的依赖关系必须存在,否则抛出异常
对应于@Autowired的@Qualifier注解,@Inject也有一个@Named注解.@Qualifier注解帮助我们缩小匹配Bean的选择范围(默认使用Bean的ID),而@Named通过Bean的ID来标识可选择的Bean
JSR-330在javax.inject包里也有自己的@Qualifier注解.可以通过这个注解来创建自己的限定器.唯一与Spring的@Qualifier注解不同的是一个来自于javax.inject包,另一个来自于org.springframework.beans包.
在注解注入中使用表达式
@Value是Spring3.0新引入的装配注解.可以让我们使用注解装配String类型的值和基本类型的值,例如int,boolean
例如
@Value("Kenshiro") private String name;以上代码为name属性装配一个String类型的值-Kenshiro
以下代码使用SpEL从系统属性中获取一个值
@Value("#{systemProperties.myName}") private String name;
过滤组建扫描
默认情况下,<context:component-scan />查找使用构造型(stereotype)注解所标注的类,这些特殊的注解如下
过滤器类型 | 描述 |
annotation | 过滤器扫描使用指定注解所标注的那些类,通过expression属性指定要扫描的注解 |
assignable | 过滤器扫描派生于expression属性所指定类型的那些类 |
aspectj | 过滤器扫描与expression属性所战鼓赌博更的AspectJ表达式所匹配的那些类 |
custom | 使用自定义的org.springframework.core.type.TypeFilter实现类,该类由expression属性指定 |
regex | 过滤器扫描类的名称与expression属性所指定的正则表达式所匹配的那些类 |