美文网首页
Spring注解及其功能(持续更新)

Spring注解及其功能(持续更新)

作者: 念了个卿 | 来源:发表于2019-02-26 10:16 被阅读0次

    由于项目使用了spring boot,所以经常需要使用spring的一些注解来简化代码和配置,以下罗列一些平时工作中使用的注解

    @Autowired

    此注解的作用是把对应的服务类根据类型byType注入到Spring容器中

    @Resource

    此注解并不是spring的,而是j2ee的,但是spring也支持此注解,这个注解注入的方式和@Autowired不一样的地方是这个是根据名称byName来实现的

    @RequestMapping

    根据Spring MVC架构,需要把对应的http请求映射到对应的控制器上,这时候就需要用到这个注解了,

    主要作用是配置url映射,当控制器在类级别上添加@RequestMapping注解时,这个注解会应用到控制器的所有处理器方法上。处理器方法上的@RequestMapping注解会对类级别上的@RequestMapping的声明进行补充。

    @Controller      @Controller 用来响应页面,必须配合模版来使用

    @RestController   @RestController是@ResponseBody和@Controller的组合注解。

     @RolesAllowed 表示访问对应方法时所应该具有的角色,使用前需要导入Jsr-250-api依赖,开启注解 

    @Async 作用在方法上,表示此方法和方法的调用者之间是异步的,即调用此方法的方法不需要等这个方法执行完毕再执行之后的代码

    @ApiOperation   这个注解并不是Spring的,它是swagger里的注解,但是这个注解配合Spring可以很好的解决一个问题,就是用来构建API接口文档的,具体的使用方式是@ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”;)等

    @Deprecated  这个也是jdk自带的注解,主要作用就是表明这个方法或者类已经废弃,

    @Around

    @Bean

    @Before

    @After

    注解的实现原理

    首先我们需要了解Java为我们提供的元注解和相关定义注解的语法,举例如下@Target({ElementType.METHOD})

    @Documented

    @Retention(RetentionPolicy.RUNTIME)

    public @interface Demo {

    boolean value()default true;

    }

    注解的实现都是使用@interface 类似于我们的class 和interface

    jdk定义了四个使用在注解上的注解来实现其他定义的注解,你可以把这四个注解理解为基础注解,不需要你考虑,jdk定义的四个注解分别为1.@Target,  2.@Retention,  3.@Documented,  4.@Inherited

    1: @Target

    作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)

    取值(ElementType)有:

    1.CONSTRUCTOR:用于描述构造器

    2.FIELD:用于描述域

    3.LOCAL_VARIABLE:用于描述局部变量

    4.METHOD:用于描述方法

    5.PACKAGE:用于描述包

    6.PARAMETER:用于描述参数

    7.TYPE:用于描述类、接口(包括注解类型) 或enum声明

    比如我们上面举的例子demo中就是表示demo注解可以使用在方法上

    2:@Retention

    作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)

     取值(RetentionPoicy)有:

    1.SOURCE:在源文件中有效(即源文件保留)

    2.CLASS:在class文件中有效(即class保留)

    3.RUNTIME:在运行时有效(即运行时保留)

    一般而言,我们的注解都是使用RUNTIME运行时有效

    3:@Document

    用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。

    注解是根据Spring的aop原理来实现的,aop的原理又是基于java的动态代理和cglib(基于字节码)的包来实现

    一般定义完一个注解后,需要实现注解的功能,就需要新增一个类专门去实现这个注解的功能了

    类名一般和注解名一样,也可以在注解名后面写上Aspect

    定义好类之后,怎么把注解和对应的类进行关联呢,我们就需要定义一个切点方法(因为我们知道注解本身就是基于Spring的aop原理来实现的)

    所以先定义好一个切点方法

    public void point(){

        

    },在这个方法上使用spring自带的切点注解来和实现类和注解的关联

    @Point("@annotation(com.xidian.haitang.annotations.Demo)")

    public void point(){

    }

    这样我们就可以利用spring的aop原理和自带的注解来实现具体功能了,例如

    @Before("point")

    @After("point")

    @Around("point()")

    这样就是一个自定义的注解了。

    相关文章

      网友评论

          本文标题:Spring注解及其功能(持续更新)

          本文链接:https://www.haomeiwen.com/subject/ztlnyqtx.html