SpringBoot自定义注解

Springboot注解概要

注解我们知道的较早,较早知道的有@override,spring栈有很多注解,常见的有@Controller,@ResponseBody,@@RequestMapping等等,之前我们有用xml等配置文件的方式配置大量属性以及各种依赖,现在我们基本告别了xml时代。既然注解这么好用,那怎么使用她呢?
其实自定义注解也没有那么什么,那么复杂

第一步 引入jar包

  <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
                <version>2.1.0.RELEASE</version>
   </dependency>

编写自定义注解类

package pro.nbbt.admin.data;


import java.lang.annotation.*;

@Documented
@Inherited
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Pink {
   String value() default "PINK FLOYD";
}

编写切面类,来处理刚才定义的注解

java提供了四种注解来自定义注解

  • @Target
    表示该注解可以用于什么地方,可能的ElementType参数有:
    CONSTRUCTOR:构造器的声明
    FIELD:域声明(包括enum实例)
    LOCAL_VARIABLE:局部变量声明
    METHOD:方法声明
    PACKAGE:包声明
    PARAMETER:参数声明
    TYPE:类、接口(包括注解类型)或enum声明
  • @Retention
    表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括:
    SOURCE:注解将被编译器丢弃
    CLASS:注解在class文件中可用,但会被VM丢弃
    RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息
  • @Document
    将注解包含在Javadoc中
  • @Inherited
    允许子类继承父类中的注解
package pro.nbbt.admin.data;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;

@Aspect
@Component
public class PinkAspect {
   @Pointcut("@annotation(pro.nbbt.admin.data.Pink)")
   public void annotationPointCut() {
   }

   @Before("annotationPointCut()")
   public void before(JoinPoint joinPoint) {
       MethodSignature sign = (MethodSignature) joinPoint.getSignature();
       Method method = sign.getMethod();
       Pink annotation = method.getAnnotation(Pink.class);
       System.err.print("我是:" + annotation.value() + "的歌迷");
   }
}

在对应的类上加上注解

    @Pink
   @RequestMapping(value = "/enterprise/list", method = RequestMethod.GET)
   public Object getEnterprise() {
       List<Enterprise> enterprises = enterpriseService.selectList(new EntityWrapper<Enterprise>());
       List<Map<String,Object>> data = new ArrayList<>(16);
       for (Enterprise enterprise: enterprises){
           if (enterprise == null || "".equals(enterprise) ){
              Tip.ERROR(300,"无对应企业");
           }
           Map<String,Object> map = new HashMap<>();
           map.put("id", enterprise.getId());
           map.put("name",enterprise.getName());
           data.add(map);
       }
       Tip t = Tip.SUCCESS("查询成功");
       t.put("list", data);
       return t;
   }

在这里插入在这里插入图片描述日志已经打印

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值