Spring Annotion

Spring Annotion注解配置和使用说明。

注解配置

开启Spring Annotion注解功能

1
<context:annotation-config/>

它将隐式地向 Spring 容器注册AutowiredAnnotationBeanPostProcessorCommonAnnotationBeanPostProcessorPersistenceAnnotationBeanPostProcessor以及RequiredAnnotationBeanPostProcessor 这 4 个 BeanPostProcessor。

开启SpringMVC注解功能

1
<mvc:annotation-driven />

它将隐式地向Spring容器注册DefaultAnnotationHandlerMappingAnnotationMethodHandlerAdapter

Required

@Required注解用于检查被注解属性是否已经设置,但并不会检测属性是否为空。

1
2
3
4
@Required
public void setName(name) {
this.name = name;
}

1
2
3
<bean id="person" class="Persoon">
<property name="name" value="jack" />
</bean>

如果bean中没有设置name,则会抛出BeanInitializationException异常。

Autowired

@Autowired注解用于对类进行自动装配工作(按照类型注入)。

常见情况:

  • 匹配的候选Bean数目必须有且仅有一个;
  • 无匹配的Bean时将抛出BeanCreationException 异常
  • @Autowired(required = false)意味着该Bean不是必须的,即使匹配不到也不会报错;
  • 多个候选Bean将抛出 BeanCreationException 异常。

如果有多个候选的bean该如何处理?

@Qualifier可以用来指定注入的bean。

@Qualifier是与@Autowired结合使用,这样就会把注入类型从按名称注入转变为按按名称注入。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Student {
@Autowired
@Qualifier("math") // 指定数学书
private Book book;
private Pen pen;

@Autowired
public void setPen(@Qualifier("pencil")Pen pen) {
this.pen = pen;
}
}

public class Student {
private Book book;

@Autowired
public Student(Book book) {
this.book = book;
}
}

Resource

@Resource注解是按照名称来装配注入的,只有找不到对应的名称才会按照类型来装配注入。

@Resource注解是由J2EE提供,而@Autowired是由Spring提供。

1
2
3
4
5
@Resource(name="math")
private Book book;

@Reousrce(type=Book.class)
private Book book;

一般情况下,无需使用type方式(反射可以获取类型)。

其他

@Service用于标注业务层组件;

@Controller用于标注控制层组件(如struts中的action);

@Repository用于标注数据访问组件,即DAO组件;

@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。