springboot中的一些注解

@Target
用于设定注解范围,通过ElementType来指定注解适用范围的枚举集合;

ElementType取值注解适用范围
METHOD可用于描述方法上
TYPE用于描述类、接口(包括注解类型)或enum声明上
ANNOTATION-TYPE用于注解类型上(被@interface修饰的类型)
CONSTRUCTOR用于描述构造器
FIELD用于描述域(作用在属性上)
LOCAL_VARIABLE用于描述局部变量
PACKAGE用于记录java文件的package信息
PARAMETER可用于参数上

@Retention
用于定义被它所注解的注解保留多久,内部有一个枚举类型的属性RetentionPolicy

public enum RetentionPolicy {
    /**
     * 注解保留在源文件,当  Java 文件编译成 class 文件的时候,注解将被编译器废弃
     */
    SOURCE,
    /**
     * 注解被保留到 class 文件,但在 jvm 加载 class 文件的是时候被废弃(默认属性)
     */
    CLASS,
    /**
     * 注解将被记录在由编译器的类文件,并在运行时由虚拟机保留
     */
    RUNTIME
}
如果需要在运行时动态获取注解信息,只能用RUNTIME
如果要在编译时进行一些预处理操作,就用CLASS
如果仅仅做一些检查的操作,则用SOURCE

@interface
自定义注解自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。
在定义注解时,不能继承其他的注解或接口。
使用@interface来声明一个注解,

  1. 每一个方法实际上是声明了一个配置参数,
  2. 方法的名称就是参数的名称
  3. 返回值类型就是参数的类型,(返回值类型只能是基本类型、Class、String、enum)
  4. 可以通过default来声明参数的默认值

@Document
Documented注解表明这个注解是由 javadoc记录的,在默认情况下也有类似的记录工具。
如果一个类型声明被注解了文档化,它的注解成为公共API的一部分。

@Controller
在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面
若返回json等内容到页面,则需要加@ResponseBody注解

@RestController
相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,
但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面

@RequestMapping
来映射请求,也就是通过它来指定控制器可以处理哪些URL请求

@AliasFor
经常会发现很多注解的不同属性起着相同的作用,比如@RequestMapping的value属性和path属性,这就需要做一些基本的限制,
比如value和path的值不能冲突,比如任意设置value或者设置path属性的值,都能够通过另一个属性来获取值等等。

##1> 可以定义一个注解中的两个属性互为别名
public @interface ComponentScan {
    @AliasFor("path")
    String[] value() default {};
    

    @AliasFor("value")
    String[] path() default {};

}
##2>跨注解的属性别名
@Component
public @interface Service {
    @AliasFor(annotation = Component.class)
    String value() default "";
}
@Service#value为@Component#value的别名,@Service#value的值可以映射到@Component#value。
(这里我们将@Service,@Component看做一种特殊的继承关系,@Component是父注解,@Service是子注解,
@Service#value覆盖@Component#value)

@Component
把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>
@Service
用于标注业务逻辑层组件
@Controller
用于标注控制层组件
@Repository
用于标注数据访问组件,即Dao组件

@Aspect
把当前类标识为一个切面供容器读取
@Pointcut
每个Pointcut的定义包括2个部分,表达式+方法签名
方法签名是public void型(如‘1>’),(也可以有返回类型如‘2>’)可以将Pointcut中的方法看作是一个被Advice引用的助记符,
因为表达式不直观,所以通过方法签名的方式为此表达式命名。Pointcut中的方法只需要方法签名,不需要具体实现。

<-- 	
	@Pointcut("execution(* com.ahaxt.base.controller.*.*(..)))
	public void pointcutControl() {   
	}
	@Before(value = " pointcutControl()")
-->  
等价于
 <-- 
	@Before("execution(* com.ahaxt.base.controller.*.*(..)))
  -->

@Around 环绕增强
@AfterReturning 后置增强,目标方法正常退出时执行
@Before 标识一个前置增强方法,目标方法执行前实施增强
@AfterThrowing 异常抛出增强
@After final增强,不管是抛出异常或者正常退出都会执行

1> @Pointcut("execution(* com.ahaxt.base.controller.*.*(..)))
	public void pointcutControl() {   
	}
	@Before(value = " pointcutControl()")
	public void before(JoinPoint joinPoint) {...}

2> @Around("execution(* com.abc.service.*.many*(..))")
    public Object process(ProceedingJoinPoint point) throws Throwable {
        System.out.println("@Around:执行目标方法之前...");
        //访问目标方法的参数:
        Object[] args = point.getArgs();
        if (args != null && args.length > 0 && args[0].getClass() == String.class) {
            args[0] = "改变后的参数1";
        }
        //用改变后的参数执行目标方法
        Object returnValue = point.proceed(args);
        System.out.println("@Around:执行目标方法之后...");
        System.out.println("@Around:被 织入的目标对象为:" + point.getTarget());
        return "原返回值:" + returnValue + ",这是返回结果的后缀";
    }

@Resource
(这个注解属于J2EE的),默认按照名称进行装配,名称可以通过name属性进行指定,
如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,
如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。
但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

@Autowired
Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,
如果要允许null值,可以设置它的required属性为false,
如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,
如下:

@Autowired () @Qualifier ( "baseDao" )
private BaseDao baseDao;

@Deprecated
表示此方法或类不再建议使用,调用时也会出现删除线,但并代表不能用,只是说,不推荐使用,因为还有更好的方法可以调用
(因为在一个项目中,工程比较大,代码比较多,而在后续开发过程中,可能之前的某个方法实现的并不是很合理,
这个时候就要新加一个方法,而之前的方法又不能随便删除,因为可能在别的地方有调用它,所以加上这个注解,就方便以后开发人员的方法调用了)

@Transactional
声明式事务管理的回滚机制
如果你在方法中有try{}catch(Exception e){}处理,那么try里面的代码块就脱离了事务的管理,若要事务生效需要在catch中throw new RuntimeException ("xxxxxx");
在@Transactional注解的方法中,再调用本类中的其他方法method2时,那么method2方法上的@Transactional注解是不!会!生!效!的!
目标对象内部的自我调用,也就是通过this.指向的目标对象将不会执行方法的增强
JVM的动态代理是基于接口实现的,通过代理类将目标方法进行增强,所以@Transactional注解的方法必须是公共方法,就是必须是public修饰符!!!

@Configuration
用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

@CrossOrigin(allowCredentials = “true”, allowedHeaders = “*”)
出于安全原因,浏览器禁止Ajax调用驻留在当前原点之外的资源。例如,当你在一个标签中检查你的银行账户时,你可以在另一个选项卡上拥有EVILL网站。
来自EVILL的脚本不能够对你的银行API做出Ajax请求(从你的帐户中取出钱!)使用您的凭据。
allowCredentials="true"其实是配置了CrossOrigin中的DEFAULT_ALLOWED_HEADERS:允许跨域传输所有的header参数,将用于使用token放入header域做session共享的跨域请求

@MappedSuperclass

(https://www.cnblogs.com/zqyanywn/p/7753596.html)

将实体类的多个属性分别封装到不同的非实体类中,例如,数据库表中都需要id来表示编号,id是这些映射实体类的通用的属性,交给jpa统一生成主键id编号,那么使用一个父类来封装这些通用属性,并用@MappedSuperclas标识。

@PersistenceContext
往DAO类中注入EntityManage,一个保存实体类状态的数据结构,针对不同实体类状态

https://www.cnblogs.com/siwuxie095/p/7284867.html

,做出相应的反应

@ExceptionHandler(Exception.class)
全局异常捕捉处理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值