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;
}
在这里插入日志已经打印