zoukankan      html  css  js  c++  java
  • Spring注解

    Spring注解

    Bean常用注解:

    1.声明Bean的注解:

    @Component

    声明为spring组件,配置Bean

    @Controller

    注册在类上,声明这个类是SpringMVC的Controller,将其声明为spring的Bean,一般用于写后台(有页面)

    @Service

    在业务逻辑层(service层)使用,作用于serviceImpl上

    @Repository

    在数据访问层(dao层)使用,将这个接口定义为一个资源库,使它能够被其他程序引用,并为其他程序提供存取数据库的功能,作用于daoImpl上

    2.注入Bean的注解:

    @Autowired

    作用于字段上,用来装配bean,默认按type注入,默认情况必须要求依赖对象必须存在,如果要允许null值,设置required=false,如:@Autowired(required=false)

    @Resource

    作用于字段上,用来装配bean,默认按name注入,当找不到匹配名称的bean再按type装配,@Resource(name=”beanName”)指定了name,则按名称注入,但没找到bean也不会按照类型装配了

    @Inject

    按type装配bean,功能比@Autowired少,没使用必要

    springBoot注解:

    @SpringBootApplication

    声明是一个spring boot应用

    @Entity

    作用于类上,实体类定义

    @Table

    作用于类上,执行关联的数据库的表名,如:@Table(name = “department”)

    @Id

    作用于字段上,定义一条记录的唯一标识

    @GeneratedValue

    作用于字段上,将其设置为自动生成,如:@GeneratedValue(strategy = GeneratedType.IDENTITY)

    @ManyToOne

    作用于字段上,定义该类与定义的对象是多对一的关系

    @ManyToMany

    作用于字段上,定义该类与定义的对象是多对多的关系

    @DateTimeFormat

    作用于字段上,日期类型的数据必须使用该注解进行格式化,以保证它在存取时能提供正确的格式,避免保存失败,如:@DateTimeFormat(pattern=”yyyy-MM-dd HH:mm:ss”)

    @JsonBackReference

    作用于字段上,用于防止关系对象的递归访问

    @RestController

    相当于@Controller + @ResponseBody 组合注解,声明Rest风格的控制器,一般用于写API,给移动客户端提供数据,一般是返回json数据。

    @EnableAutoConfiguration

    作用于类上,自动配置,相当于写了spring的配置文件

    @ComponentScan

    一般作用于App类上,用于组件扫描,配置一个或多个扫描的包,如:@ComponentScan(basePackages = {"com.springboot.*"})

    @MapperScan

    一般作用于App类上,用于扫描mapper类注解,不能使用com.springboot.*

    区别:

    @ComponentScan是组件扫描注解,用来扫描@Controller  @Service  @Repository这类,主要就是定义扫描的路径从中找出标志了需要装配的类到Spring容器中。

    @MapperScan 是扫描mapper类的注解,就不用在每个mapper类上加@MapperScan了。

    这两个注解是可以同时使用的。

    @Primary

    自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常

    @Qualifier

    Qualifier的意思是合格者,通过这个标示,表明了哪个实现类才是我们所需要的,添加@Qualifier注解,需要注意的是@Qualifier的参数名称为我们之前定义@Service注解的名称之一。

    @ConditionalOnExpression

    在配置文件中设置一个开关,enabled,在开关为true的时候才实例化bean,进行相关业务逻辑的操作。

     如:@ConditionalOnExpression("${enabled:false}")

    @Validated和@Valid

    配合BindingResult可以直接提供参数验证结果。

    @Validated:用在类型、方法和方法参数上。但不能用于成员属性(field)。@Valid:可以用在方法、构造函数、方法参数和成员属性(field)上。

    spring常用注解:

    @EnableScheduling + @Scheduled(cron = "*/1 * * * * ?")

    定时任务注解,每秒钟

    @RequestMapping

    一般作用在Controller的方法上,映射WEB请求(访问路径和参数)

    @ResponseBody

    作用于方法上,返回结果不会被解析为跳转路径,会直接返回json数据

    @RequsetBody

    作用于形参列表上,用于将前台发送过来的固定格式的数据(xml或json数据)封装为JavaBean对象,如:login(@RequestBody User loginUser,HttpSession session)

    @PathVariable

    用来接收路径参数,如:

    @RequestMapping("saveNotes/{conferId}")

    public String xxx(@PathVariable String conferId)

    @RequestParam

    用于将请求参数区(如url)中的参数映射到功能处理方法的参数上,如:public String xxx(@RequestParam String userName),如果不加@RequestParam参数userName为非必传,加上则为必传。

    @RequestParam:

    1.可以使用required设置为非必传,默认为true如:@RequestParam(required=false)

    2.可以指定参数名,如:@RequestParam(value=”userName”)

    3.可以使用defaultValue设置参数默认值,如:@RequestParam(defaultValue=”lee”)

    @Lazy

    作用于类或方法上,指定bean是否延迟初始化,默认为false,如:@Lazy(true)相当于<bean id=”xx” lazy-init=””>,注:此处初始化不是指不执行init-method,而是不创建bean实例和依赖注入,只有当该bean(被@Lazy修饰的类或方法)被其他bean引用或执行getBean方法获取,才会真正的创建bean实例

    @ExceptionHander

    作用于方法上,定义全局处理控制器的异常,通过value属性可以过滤拦截的条件,如:@ExceptionHander(value=Exception.class) 表示拦截所有的Exception

    @ControllerAdvice或@RestControllerAdvice

    作用于类上,controller 的一个辅助类(控制器切面),最常用的就是作为全局异常处理的切面类

    @PostConstruct

    解决调用service层时为null的问题

    被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。

    @PreConstruct

    被@PreConstruct修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreConstruct修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。(详见下面的程序实践)

     @Deprecated

    被注解@Deprecated标记的程序元素是不鼓励使用的程序元素,通常是因为它很危险,或者是因为存在更好的替代方案。 即被废弃的代码。

    AOP切面编程注解:

    @Transactional

    作用于方法上,声明事务,加入 @Transactional 注解,使用 默认配置,抛出异常之后,事务会自动回滚,数据不会插入到数据库。

    Java配置类相关注解:

    @Bean

    作用于方法上,该方法的返回值定义为容器中的bean,向spring容器注册自定义类

    @Configuration

    作用于类上,被修饰的类相当于一个xml文件,相当于<beans></beans>,在spring boot中大量使用了该注解,该注解提供了一种使用Java类方式配置bean

    @PropertySource

    作用于类上,用于加载配置文件,如:@PropertySource(value=”classpath:jdbc.properties”)

    @Value

    作用于成员变量,常用于注入文件属性中的值,如:@Value(“${spring.datasource.url}”),@Value(“普通字符”) 注:@Value不能对static属性注入

    @Scope

    作用于方法上,设置spring容器如何新建bean实例,如@Scope(“prototype”)声明Scope为ProtoType

    其设置类型包括(bean的5个作用域):

    Singleton(单例,一个spring容器中只有一个bean实例)

    ProtoType(每次调用创建一个bean实例)

    Request(web项目中,给每一个http request 新建一个bean实例)

    Session(web项目中,给每一个http session 新建一个bean实例)

    GlobalSession(给每一个global http session 新建一个bean实例)

      

    JDK自带注解

    • @Override  重写, 标识覆盖它的父类的方法
    • @Deprecated    已过期,表示方法是不被建议使用的
    • @Suppvisewarnings   压制警告,抑制警告

    元注解

    @Target   表示该注解用于什么地方,可取的值包括:

    • ElemenetType.CONSTRUCTOR       构造器声明
    • ElemenetType.FIELD          域声明(包括 enum 实例)
    • ElemenetType.LOCAL_VARIABLE     局部变量声明
    • ElemenetType.METHOD         方法声明
    • ElemenetType.PACKAGE         包声明
    • ElemenetType.PARAMETER       参数声明
    • ElemenetType.TYPE          类,接口(包括注解类型)或enum声明
    • ElementType.ANNOTATION_TYPE     注解

    @Retention   表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:

    • RetentionPolicy.SOURCE       注解将被编译器丢弃
    • RetentionPolicy.CLASS        注解在class文件中可用,但会被VM丢弃
    • RetentionPolicy.RUNTIME       JVM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。

    @Documented   将此注解包含在 javadoc 中

    @Inherited   允许子类继承父类中的注解

    常见第三方注解

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

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

    @Transactional:    声明这service所有方法都需要事务管理。每一个业务方法开始时都会打开一个事务

    @Controller:    控制层

    @Component:    把该中立的类交给spring管理

    @Autowired:    自动装配,将bean容器里的值自动注入到bean

    @Path:      处理REST请求,接口路径

    @Method:    

    常用的HTTP动词有下面五个(括号里是对应的SQL命令)。

    • GET(SELECT):从服务器取出资源(一项或多项)。
    • POST(CREATE):在服务器新建一个资源。
    • PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
    • PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
    • DELETE(DELETE):从服务器删除资源。

    还有两个不常用的HTTP动词。

    • HEAD:获取资源的元数据。
    • OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。

    @Accept和@Content-Type

    @Accept:    就表示接口要返回给客户端的数据格式
    @Content-Type:    表示客户端发送给服务器端的数据格式。这个是写REST接口时候定义的 
       正常如果服务器没定义Accept但是自己添加了的话会报404,没找到对应接口。
     
    @Produces   表示类或者方法返回的MIME数据类型

    有几种格式如下:

    (1)@Produces("text/plain") 文本类型

    (2)@Produces("text/html")  Html类型

    (3)@Produces({"application/xml"}) Xml类型

    (4)@Produces({ "application/json"}) Json类型

           可以一次注解两种或多种的MIME类型,格式如:{"application/xml", "application/json"}这表示两者都可以使用,但是选择的时候一般会选择前者,即application/xml,因为它第一次出现。

    @Consumes    代表的是一个资源可以接受的 MIME 类型
     
    @Queryparam与@Pathparam

    @Queryparam:指定的是URL中的参数是以键值对的形式出现的,而在程序中 @QueryParam("from")  int from则读出URL中from的值, 

    例如:URL输入为:users?from=100&to=200&orderBy=age&orderBy=name 

    @Pathparam:URL中只出现参数的值,不出现键值对

    例如: /users/100 

  • 相关阅读:
    Excel表格函数逻辑排错
    MobaXterm体验最好的SSH客户端
    Excel中的常用函数
    Shell 知识点2020
    Linux 知识点2020
    Python知识点2020
    es6 模版字符串
    es6对象定义简写
    es6解构赋值
    ES6 let const关键字
  • 原文地址:https://www.cnblogs.com/lijianda/p/8855919.html
Copyright © 2011-2022 走看看