@Transactional +自定义注解不生效_注解就这么简单

出自:Java3y https://mp.weixin.qq.com/s/n-P8W8OzcKIg3UiFC-JycA

前言

今天要讲的是注解,对于本章节,最好是有Servlet基础的人查阅~因为单纯是Java基础的话,可能用不上注解这个东西。但如果开发过Servlet,就对@WebServlet不会陌生。

现在的开发都推崇使用注解来进行开发,这样就可以免去写XML配置了,十分方便的一项技术~

学习注解可以更好地理解注解是怎么工作的,看见注解了就可以想到它的运行原理了~。

如果有错的地方请大家多多包涵并欢迎在评论区指正~

一、什么是注解?

注解:Annotation….

注解其实就是代码中的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相对应的处理

二、为什么我们需要用到注解?

传统的方式,我们是通过配置文件(xml文件)来告诉类是如何运行的

有了注解技术以后,我们就可以通过注解告诉类如何运行

例如:我们以前编写Servlet的时候,需要在web.xml文件配置具体的信息

4329898f91b25118a2d096273b9729ec.png

这里写图片描述

我们使用了注解以后,可以直接在Servlet源代码上,增加注解…Servlet就被配置到Tomcat上了。也就是说,注解可以给类、方法上注入信息。

eab755f896bba66f4d2a894943932da8.png

这里写图片描述

明显地可以看出,这样是非常直观的,并且Servlet规范是推崇这种配置方式的

三、基本Annotation

在java.lang包下存在着5个基本的Annotation,其中有3个Annotation我们是非常常见的了。

3.1@Override

重写注解

如果我们使用IDE重写父类的方法,我们就可以看见它了。那它有什么用呢??

@Overried是告诉编译器要检查该方法是实现父类的…可以帮我们避免一些低级的错误…

比如,我们在实现equals()方法的时候,把euqals()打错了,那么编译器就会发现该方法并不是实现父类的,与注解@Override冲突,于是就会给予错误

e4e04391e378c559b955c4274199866f.png

这里写图片描述


3.2@Deprecated

过时注解

该注解也非常常见,Java在设计的时候,可能觉得某些方法设计得不好,为了兼容以前的程序,是不能直接把它抛弃的,于是就设置它为过时

Date对象中的toLocalString()就被设置成过时了

 @Deprecated public String toLocaleString() { DateFormat formatter = DateFormat.getDateTimeInstance(); return formatter.format(this); }

当我们在程序中调用它的时候,在IDE上会出现一条横杠,说明该方法是过时的。

4329898f91b25118a2d096273b9729ec.png

这里写图片描述


3.3@SuppressWarnings

抑制编译器警告注解

该注解在我们写程序的时候并不是很常见,我们可以用它来让编译器不给予我们警告

当我们在使用集合的时候,如果没有指定泛型,那么会提示安全检查的警告

cd3ee7e6783982cd6c648680f6a0719f.png

这里写图片描述

如果我们在类上添加了@SuppressWarnings这个注解,那么编译器就不会给予我们警告了

56af24ac6a8a69543bf1dc257f3545bf.png

这里写图片描述

3.4@SafeVarargs

Java 7“堆污染”警告

什么是堆污染呢??当把一个不是泛型的集合赋值给一个带泛型的集合的时候,这种情况就很容易发生堆污染….

这个注解也是用来抑制编译器警告的注解…用的地方并不多,我也不详细说明了……有用到的时候再回来填坑吧。

3.5@FunctionalInterface

@FunctionalInterface用来指定该接口是函数式接口

用该注解显示指定该接口是一个函数式接口。


四、自定义注解基础

上面讲解的是java.lang包下的5个注解,我们是可以自己来写注解,给方法或类注入信息

4.1标记Annotation

没有任何成员变量的注解称作为标记注解,@Overried就是一个标记注解

//有点像定义一个接口一样,只不过它多了一个@public @interface MyAnnotation {}

4.2元数据Annotation

我们自定义的注解是可以带成员变量的,定义带成员变量的注解叫做元数据Annotation

在注解中定义成员变量,语法类似于声明方法一样….

public @interface MyAnnotation { //定义了两个成员变量 String username(); int age();}

注意:在注解上定义的成员变量只能是String、数组、Class、枚举类、注解

有的人可能会奇怪,为什么注解上还要定义注解成员变量??听起来就很复杂了….

上边已经说了,注解的作用就是给类、方法注入信息。那么我们经常使用XML文件,告诉程序怎么运行。XML经常会有嵌套的情况

 zhongfucheng作者> 22222价钱>书>

那么,当我们在使用注解的时候,也可能需要有嵌套的时候,所以就允许了注解上可以定义成员变量为注解。

4.3使用自定义注解

上面我们已经定义了一个注解了,下面我们来使用它吧

4.3.1常规使用

下面我有一个add的方法,需要username和age参数,我们通过注解来让该方法拥有这两个变量

 //注解拥有什么属性,在修饰的时候就要给出相对应的值 @MyAnnotation(username = "zhongfucheng
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值