@SpringBootApplication

  1. @Target(ElementType.TYPE)
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. @Inherited
  5. @SpringBootConfiguration
  6. @EnableAutoConfiguration
  7. @ComponentScan(excludeFilters = {
  8. @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
  9. @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
  10. public @interface SpringBootApplication {
  11. ...
  12. }

主要关注的几个注解如下
@SpringBootConfiguration:标记当前类为配置类
@EnableAutoConfiguration:开启自动配置
@ComponentScan:扫描主类所在的同级包以及下级包里的Bean
关键是@EnableAutoConfiguration

  1. @Target(ElementType.TYPE)
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. @Inherited
  5. @AutoConfigurationPackage
  6. @Import(AutoConfigurationImportSelector.class)
  7. public @interface EnableAutoConfiguration {
  8. String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
  9. Class<?>[] exclude() default {};
  10. String[] excludeName() default {};
  11. }

@Service、 @Controller、 @Repository 和 @Component

@Controller:

  • SpringMVC 中,控制器 Controller 负责处理 DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个 Model,然后再把该 Model 返回给对应的 View 进行展示。
  • SpringMVC 提供了一个非常简便的定义 Controller 的方法,你无需继承特定的类或者接口,只需使用 @Controller 标记一个类是 Contoller。

@Service、 @Contrller、 @Repository 其实这 3 个注解和 @Component 是等效的,用在实现类上:

  • @Service 用于标注业务层组件
  • @Controller 用于标注控制层组件
  • @Repository 用于编著数据访问组件
  • @Component 泛指组件,当组件不好归类时,可以使用这个注解进行标注

@RequestMapping

使用 @RequestMapping 来映射 URL 到控制器,或者到 Controller 控制器的处理方法上。method 的值一旦指定,则处理方法只对指定的 HTTP method 类型请求处理。

可以为多个方法映射相同的 URI,不同的 HTTP method 类型,Spring MVC 根据请求的 method 类型是可以区分开这些方法的。

@RequestParam 和 @PathVariable

在 SpringMVC 中,两者的作用都是将 request 里的参数的值绑定到 Controller 里的方法参数中,区别在于 URL 的写法不同。

  • 使用 @RequestParam 时,URL 是这样的:
  1. http://host:port/path?参数名=参数值
  • 使用 @PathVariable 时,URL 是这样的:
  1. http://host:port/path/参数值

@ResponseBody

该注解用于将 Controller 中方法返回的对象,通过适当的 HttpMessageConverter 转换为指定的格式后,写入到 Response 对象的 bodys 数据区。

@Value

在 Spring 3.0 中,可以通过使用 @Value,对一些如 xxx.properties 文件中的文件,进行键值对的注入。

@Autowired

@Autowired 可以对成员变量、成员方法和构造函数进行标注,来完成自动装配工作。

@Autowired 和 @Resource 的区别

@Autowired

  • 是 Spring 提供的注解
  • 采用的策略是按照类型注入的
    存在问题:同一类型有多个 Bean,可以使用 @Qualifier 具体去装配哪个对象。
    1. public class UserService{
    2. @Autowired
    3. userDao; //在 Spring 容器中找到类型为 userDao 的类,将其注入
    4. }
    1. public class UserService{
    2. @Autowired
    3. @Qualifier(name="userDao")
    4. userDao; //在 Spring 容器中找到类型为 userDao 的类,将其注入
    5. }

@Resource

  • J2EE 提供的注解
  • 默认是按照名称注入的

    1. Service{
    2. @Resource
    3. userDao; //自动按名称进行装配
    4. @Resource(name="studentDao")
    5. studentDao; //按名称进行装配,找不到会抛出异常
    6. @Resource(type="TeacherDao")
    7. teacherDao; //按类型进行装配,找不到或者找到多个都会抛出异常
    8. @Resource(name="manDao",type="ManDao")
    9. manDao;//找唯一匹配的 Bean 进行装配,如果找不到则会抛出异常
    10. }