Spring 中常见的注解

区分 @Component/@Repository/@Service

注解 含义 功能
@Component 最普通的组件,表明可以被注入到 spring 容器中进行管理 其他三个注解是这个注解的拓展,@Component+特定功能
@Repository 表示和数据库相关的操作 把数据库相关的异常转化为Spring持久层的异常
Service 用于逻辑业务层
Controller 作用于表现层,spring-mvc 的注解 具有将请求转发,重定向的功能

参考链接,github

注解 含义 功能
@Component 最普通的组件,表明可以被注入到 spring 容器中进行管理 其他三个注解是这个注解的拓展,@Component+特定功能
@Repository 表示和数据库相关的操作 把数据库相关的异常转化为Spring持久层的异常
Service 用于逻辑业务层
Controller 作用于表现层,spring-mvc 的注解 具有将请求转发,重定向的功能

@ Autowired / @Override

@Autowired

这个注解不是用来重写方法时用的!!!
作为标记,可以使得Spring 依赖注入工具 构建函数( construct)、变量(field)/ setter 方法或配置方法 自动装配。
只有任何被给定的 bean class 的构建函数可能带有 @Autowired, 表明这个构建函数(constructor) 作为 Spring bean 时会自动装配。这样的构建函数不需要公开(public)。
在构建 bean 之后 、配置方法调用(invoke)之前变量被注入。这样配置变量不需要公开。
配置方法可能有任意的(arbitrary)名字和任意参数;每个参数可以被匹配的 bean 自动装配到 Spring 容器中。Bean 属性 setter 方法用这种通用的配置是非常有效率的。这样的配置变量不需要公开。
在多参数构建方法中,被需要的参数是??独立的参数可能被以 Java8 的格式声明,或者是 Spring Framework 5.0。

@Override

@Override 表明方法声明是打算覆盖在在父类型(比如接口)中的方法声明。如果一个方法使用@Override注解产生错误,有可能是以下两种条件造成的:

  1. 此方法已经在超类中覆盖或实现了方法声明了。
  2. 这个方法有一个签名覆盖相当于...(没看懂)
    把这两个注释有点弄混了,

@ResponseBody 的作用

@ResponseBody注解的作用是将 controller 的方法返回的对象通过适当的转换器转化为指定的格式之后,写到 response 对象的 body 区,通常用来返回 JSON 数据或 XML

在使用@ResponseBody 注解之后数据不会再走视图处理器,而是直接将数据写入到输入流中,它的效果等同于通过 response 对象输出指定格式的数据。

@RequestMapping("/login")
@ResponseBody
public User login(User user){
      return user;
}
User 字段: userName pwd
// 前台接受的数据为 `{"userName": "xxx", "pwd" : "xxx"}`

其效果相当于

@RequestMapping("/login")
public void login(User user, HttpServletResponse response){
      response.getWriter.write(JSONObject.fromObject(user).toString());
}

@RestController & @Controller 的区别

  • @RestController 是 @controller 和 @ResponseBody 的结合。会如同 @ResponseBody 一样返回的是 json,而不是字符串。一般在做 Restful API 的时候用。
  • @Controller,只是表示是一个组件,还需要配合其他的注解或代码使用。

注解写在接口上还是实现类上

一般写在实现类上,
http://blog.csdn.net/qq_35923749/article/details/77159213
https://juejin.im/entry/57e496fd7db2a20063a24a3a

@MapperScan

当使用 Java 配置时,使用 @MapperScan 注解可以注册 MyBatis 映射(mapper) 接口(interfaces)。类似于像面情况时执行:

@Configuration
@MapperScan("org.mybatis.spring.sample")
public class AppConfig{
    @Bean
    public Datasource datasource(){
        return new EmbeddedDatabaseBuilder()
                        .addScript("schema.sql")
                        .build();
    }

    @Bean
    public DataSourceTransactionManager transactionManager(){
        return new DataSourceTransactionManager(dataSource());
    }

    @Bean
    public SqlSessionFactory sqlSessionFactory() throw Exception{
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        return sessionFactory.getObject();
}

你可能感兴趣的:(Spring 中常见的注解)