常用注解

spring常用注解

@Component

是一个通用的Spring容器管理的单例bean组件,最普通的组件,可以被注入到spring容器进行管理。@Component是通用注解,其他三个注解是这个注解的拓展,并且具有了特定的功能。
注解属性:

  • value:给注入的bean命名(可省略)

@Service

作用于业务逻辑层(service层),底层还是 @Component
注解属性:

  • value:给注入的bean命名(可省略)

@Repository

作用于持久层(dao层),它注解的类作为DAO对象(数据访问对象,Data Access Objects),这些类可以直接对数据库进行操作,底层还是 @Component
注解属性:

  • value:给注入的bean命名(可省略)

@Controller

作用于表现层(spring-mvc的注解),它注解的类进行前端请求的处理,转发,重定向。包括调用Service层的方法。底层还是 @Component
注解属性:

  • value:给注入的bean命名(可省略)

@RequestMapping

是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。该注解有六个属性

  1. value:指定请求的实际地址,指定的地址可以是URI Template 模式
  2. method:指定请求的method类型, GET、POST、PUT、DELETE等;
  3. onsumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
  4. produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
  5. params:指定request中必须包含某些参数值是,才让该方法处理。
  6. headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。

方法级别的注解

  • @GetMapping:所扮演的是 @RequestMapping(method =RequestMethod.GET) 的一个快捷方式。
  • @PostMapping:所扮演的是 @RequestMapping(method =RequestMethod.POST) 的一个快捷方式。
  • @PutMapping:所扮演的是 @RequestMapping(method =RequestMethod.PUT) 的一个快捷方式。
  • @DeleteMapping:所扮演的是 @RequestMapping(method =RequestMethod.DELETE) 的一个快捷方式。

@Autowired和@Resource的

@Resource:

是用来实现依赖注入的,此注解默认是byName自动注入的

装配顺序:
(1)、@Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配
(2)、指定了name或者type则根据指定的类型去匹配bean
(3)、指定了name和type则根据指定的name和type去匹配bean,任何一个不匹配都将报错

@Autowired:

也是用来实现依赖注入的,但是此注解是byType自动注入的

@Autowired只有一个属性required,默认值为true,为true时,找不到就抛异常,为false时,找不到就赋值为null

@Qualifier

@Autowired按类型查找,如果该类型的bean不唯一,则抛出异常;可通过组合注解@Qualifier解决

@Autowired
@Qualifier("userService")

注意:Spring容器以name为key储存bean!这里的name可以指定,否则取首字母小写的类名。有相同的就报异常:BeanDefinitionStoreException!

两者区别
  1. Resource是JDK提供的,而Autowired是Spring提供的
  2. Resource不允许找不到bean的情况,而Autowired允许(@Autowired(required = false))
    3· 指定name的方式不一样,@Resource(name = “baseDao”),@Autowired()和@Qualifier(“baseDao”)
    4· Resource默认通过name查找,而Autowired默认通过type查找

@RequestBody

注解@RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非Content-Type: application/x-www-form-urlencoded编码格式的数据,比如:application/json、application/xml等类型的数据。就application/json类型的数据而言,使用注解@RequestBody可以将body里面所有的json数据传到后端,后端再进行解析。

注意:
GET请求中不允许使用该注解。

@RequestParam

注解@RequestParam接收的参数是来自requestHeader中,即请求头。@RequestParam可以接受简单类型的属性,也可以接受对象类型。@RequestParam有三个配置参数如下:

  1. required 表示是否必须,默认为 true,必须。
  2. defaultValue 可设置请求参数的默认值。
  3. value 为接收url的参数名(相当于key值)。

@RequestParam用来处理 Content-Type 为 application/x-www-form-urlencoded编码的内容,Content-Type默认为该属性。

@PathVariable

作用:用于获取请求路径中的参数;例如:这样就获取到了id的值了

@RequestMapping(value="/queryNum/{id}")
publiv String getUser( @PathVariable("id") int  id){

}

@ResponseBody

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

使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

@RestController

相当于@ResponseBody + @Controller合在一起的作用。

AOP相关注解

Spring支持AspectJ的注解式切面编程。

  1. @Aspect 声明一个切面(类上)
    使用@After、@Before、@Around定义建言(advice),可直接将拦截规则(切点)作为参数。
  2. @After 在方法执行之后执行(方法上)
  3. @Before 在方法执行之前执行(方法上)
  4. @Around 在方法执行之前与之后执行(方法上)
  5. @PointCut 声明切点
    在java配置类中使用 @EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持(类上)

ComponentScan

自动扫描指定包下所有使用@Service、@Component、@Controller、@Repository的类并注册。

@Scope

定义我们采用什么模式去创建Bean(方法上,得有@Bean) 其设置类型包括:

Singleton (单例,一个Spring容器中只有一个bean实例,默认模式), Prototype(每次调用新建一个bean), Request (web项目中,给每个http request新建一个bean), Session(web项目中,给每个http session新建一个bean), GlobalSession(给每一个 global http session新建一个Bean实例)。

@Configuration

声明当前类是一个配置类(相当于一个Spring配置的xml文件)(类上)。

@Bean

注解在方法上,声明当前方法的返回值为一个Bean。返回的Bean对应的类中可以定义init()方法和destroy()方法,然后在@Bean(initMethod=”init”,destroyMethod=”destroy”)定义,在构造之后执行init,在销毁之前执行destroy。(方法上)

@PostConstruct

标注在方法上,该方法在构造函数执行完成之后执行。

@PreDestory

标注在方法上,该方法在对象销毁之前执行。

@Value

经常与Sping EL表达式语言一起使用,注入普通字符,系统属性,表达式运算结果,其他Bean的属性,文件内容,网址请求内容,配置文件属性值等。

@Transactional

Spring事务注解

@Lazy

表示延迟初始化

@Async

在实际执行的bean方法使用该注解来申明其是一个异步任务(方法上或类上所有的方法都将异步,需要@EnableAsync开启异步任务)

@Scheduled

来申明这是一个任务,包括cron,fixDelay,fixRate等类型。(方法上,需先开启计划任务的支持,需要@EnableScheduling开启定时任务)

@ControllerAdvice

这是一个增强的 Controller。使用这个 Controller ,可以实现三个方面的功能:

  1. 全局异常处理
  2. 全局数据绑定
  3. 全局数据预处理

@ExceptionHandler

用于全局处理控制器里的异常。配合@ControllerAdvice使用。

@ModelAttribute

本来的作用是绑定键值对到 Model 里,在 @ControllerAdvice 中是让全局的@RequestMapping都能获得在此处设置的键值对。

mybatis常用注解

@Param

当传入多个参数的时候我们可以通过以下方式获取值

public abstract User queryUserByThreeConditions(@Param("userId") Integer id, @Param("userName") String name, @Param("password") String pwd);

使用@param(“key”)注解,显示的指出键的值,在mapper.xml文件中通过键找值取出值即可,这样就可以很明显的表达出出入的参数的作用

@MapperScan

这个注解确实是Mybatis的注解,是为了集成Spring而写的注解。该注解主要是扫描某个包目录下的Mapper接口,将Mapper接口类交给Spring进行管理。
扫描包路径可以是一个或者多个,也可以在路径中可以使用 * 作为通配符对包名进行匹配 。

@Mapper

该注解是由Mybatis框架中定义的一个描述数据层接口的注解,注解往往起到的都是一个描述性作用,用于告诉Spring框架此接口的实现类由Mybatis负责创建,并将其实现类对象存储到spring容器中。
@Mapper接口是一个接口一个接口指定,@MapperScan可以直接指定一个包的路径。

总结:Mybatis的其他注解不经常使用,例如进行CRUD的注解,一般使用XML的方式进行使用。