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 

posted on 2018-04-16 14:59  LJD泊水  阅读(498)  评论(0编辑  收藏  举报