基于Java的Spring注解配置@Configuration

基于Java的配置,允许你在少量的Java注解的帮助下,进行你的大部分Spring配置而非通过XML文件。

以@Configuration 注解为例,它用来标记类可以当做一个bean的定义,被Spring IOC容器使用。

另一个例子是@Bean注解,它表示此方法将要返回一个对象,作为一个bean注册进Spring应用上下文。

  1. @Configuration
  2. public class StudentConfig {
  3. @Bean
  4. public StudentBean myStudent() {
  5. return new StudentBean();
  6. }
  7. }

怎样开启注解装配?

注解装配在默认情况下是不开启的,为了使用注解装配,我们必须在Spring配置文件中配置 context:annotation-config/元素。

@Component, @Controller, @Repository, @Service 有何区别?

@Component:这将 java 类标记为 bean。它是任何 Spring 管理组件的通用构造型。spring 的组件扫描机制现在可以将其拾取并将其拉入应用程序环境中。

@Controller:这将一个类标记为 Spring Web MVC 控制器。标有它的 Bean 会自动导入到 IoC 容器中。

@Service:此注解是组件注解的特化。它不会对 @Component 注解提供任何其他行为。您可以在服务层类中使用 @Service 而不是 @Component,因为它以更好的方式指定了意图。

@Repository:这个注解是具有类似用途和功能的 @Component 注解的特化。它为 DAO 提供了额外的好处。它将 DAO 导入 IoC 容器,并使未经检查的异常有资格转换为 Spring DataAccessException。

@Required 注解有什么作用

这个注解表明bean的属性必须在配置的时候设置,通过一个bean定义的显式的属性值或通过自动装配,若@Required注解的bean属性未被设置,容器将抛出BeanInitializationException。示例:

  1. public class Employee {
  2. private String name;
  3. @Required
  4. public void setName(String name){
  5. this.name=name;
  6. }
  7. public string getName(){
  8. return name;
  9. }
  10. }

@Autowired 注解有什么作用

@Autowired默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在(可以设置它required属性为false)。@Autowired 注解提供了更细粒度的控制,包括在何处以及如何完成自动装配。它的用法和@Required一样,修饰setter方法、构造器、属性或者具有任意名称和/或多个参数的PN方法。

  1. public class Employee {
  2. private String name;
  3. @Autowired
  4. public void setName(String name) {
  5. this.name=name;
  6. }
  7. public string getName(){
  8. return name;
  9. }
  10. }

请解释@Autowired注解的工作机制及required属性的作用

  1. 首先会使用byType的方式进行自动装配,如果能唯一匹配,则装配成功,
    如果匹配到多个兼容类型的bean, 还会尝试使用byName的方式进行唯一确定.
    如果能唯一确定,则装配成功,如果不能唯一确定,则装配失败,抛出异常.
  2. 默认情况下, 使用@Autowired标注的属性必须被装配,如果装配不了,也会抛出异常.
    可以使用required=false来设置不是必须要被装配.

@Autowired和@Resource之间的区别

@Autowired默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在(可以设置它required属性为false)。
@Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入。

@Qualifier 注解有什么作用

当您创建多个相同类型的 bean 并希望仅使用属性装配其中一个 bean 时,您可以使用@Qualifier 注解和 @Autowired 通过指定应该装配哪个确切的 bean 来消除歧义。

@RequestMapping 注解有什么用?

@RequestMapping 注解用于将特定 HTTP 请求方法映射到将处理相应请求的控制器中的特定类/方法。此注释可应用于两个级别:

类级别:映射请求的 URL
方法级别:映射 URL 以及 HTTP 请求方法