Java 注解
来源:互联网 发布:mac不进系统打开终端 编辑:程序博客网 时间:2024/06/18 13:39
1、Java基础加强:
注解:动态代理类加载器
2、 注解:
作用:主要就是用来替代xml的配置文件,因为解析xml比较繁琐存在的位置:在对应的Java类中.使用的范围:用于修饰包,类,构造器,方法,成员变量,参数和局部变量的声明.存储形式:key\value形式不影响原本的代码执行注解与XML的区别:注解: 优点: 直观,简单. 配置方式容易. 缺点: 配置信息相对过于零散. 修改过于麻烦(重新编译) XML: 优点: 与Java类逻辑的关系低耦合. 复用性好 修改很简单(不用编译) 缺点: 编写过于复杂. 解析操作过于复杂.总结:两种混合使用比较好,注解在配置基本不会改使用,xml配置一些经常改动的配置。
3、Java中提供三个基本注解:
a.@Override:限定重写父类方法 用处:当一个类继承于另一个类,并重写其提供的方法时. 例如:
接口 public interface Person { public void eat(); } ManPerson类实现接口 public class ManPerson implements Person { @Override public void eat() { } }
在实现的接口方法和继承类重写类的方法时,默认自动加了@Override,表示这个是父类的方法 加了这个注解就不能修改方法的名字了。b.@Deprecated:标示已过时 作用:保证软件或系统版本更新,对版本的兼容性(新版本只能增加内容,不能修改及删除). 调用的时候会出现方法上有个横线。c.@SuppressWarnings:抑制编译器警告 有时候编译器会提示一些黄色的警告错误,加上了就可以去掉黄色警告 例如: @SuppressWarnings("rawtypes") ArrayList list = new ArrayList<>();
4、自定义注解:
@interface这个不是接口,步骤:a.在包名上右击--New --- Other... --- 输入 anno,会自动出现 Annotation public @interface MyAnno { }b.我们就可以在方法上加上自己的注解了 @MyAnno public void testMyAnno(){ }这样我们就完成了自己的注解。我们可以在注解里面加属性,例如:
public @interface MyAnno { //属性 int num(); } @MyAnno(num = 0) public void testMyAnno(){//你定义了num属性,必须给值 }
注意: 如果自定义注解,只定义value属性(没有任何其他属性) public @interface MyAnno { //属性 String value(); } 使用该注解时,可以省略"value="(可以直接指定属性值,而不定义属性名) @MyAnno("") public void testMyAnno(){//你定义了num属性,必须给值 }现在我们还不知道为什么要定义注解,有啥用呢?往下看。
5、设定自定义注解的修饰范围:
@Target注解:用于修饰自定义注解 指定该自定义注解允许修饰Java类的哪个部分(类、成员变量、方法等) 例如:我只想要@MyAnno("")只能修饰类
自定义注解 package com.example.zhujie; @Target(ElementType.TYPE )//可使用的类型可以查看源码 public @interface MyAnno { //属性 int num(); } 使用: package com.example.zhujie; @MyAnno(num = 0) public class ManPerson implements Person { @SuppressWarnings("rawtypes") ArrayList list = new ArrayList<>(); //@MyAnno(num = 0) 不能修饰方法了,只能修饰类 public void testMyAnno(){ } }
@Retention注解: 用于修饰自定义注解 指定该自定义注解的生命周期.(生命周期 - SOURCE、CLASS、RUNTIME) SOURCE:在源码中有用 CLASS:在编译为class还在 RUNTIME:一直在运行中,注解都在 例如:
@Target(ElementType.TYPE ) @Retention(RetentionPolicy.SOURCE) public @interface MyAnno { //属性 int num(); }
6、通过反射读取注解:
只能读取运行时的注解;例如:
//@Target(ElementType.TYPE ) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnno { //属性 String name(); } public class TestAnnotation { public static void main(String[] args) throws Exception { Test t = new Test(); MyAnno anno = t.getClass().getAnnotation(MyAnno.class);//获取类的注解 System.out.println(anno.name()); Method m = t.getClass().getMethod("test"); MyAnno anno1 = m.getAnnotation(MyAnno.class);//获取方法的注解 System.out.println(anno1.name()); } } @MyAnno(name = "类的注解") class Test{ @MyAnno(name = "方法的注解") public void test(){ System.out.println("test"); } } 打印的信息: 类的注解 方法的注解
7、注解的运用:
我们可以在JDBC中使用注解配置,注解类就不写了,比较简单。
@JDBCAnno(driverClassName = "com.mysql.driver", password = "root", url = "jdbc:mysql://localhost:3306/mydb", username = "root") public class JDBCUtils { public static Connection getConnection(){ Connection conn = null; //1 读取四大参数 Class clazz = JDBCUtils.class; JDBCAnno jdbcAnno = (JDBCAnno) clazz.getAnnotation(JDBCAnno.class); //2 注册驱动类 try { Class.forName(jdbcAnno.driverClassName()); } catch (ClassNotFoundException e) { e.printStackTrace(); } //3 DriverManager获取连接 try { conn = DriverManager.getConnection(jdbcAnno.url(), jdbcAnno.username(), jdbcAnno.password()); } catch (SQLException e) { e.printStackTrace(); } return conn; } }
阅读全文
0 0
- Java注解-自定义注解
- Java注解----自定义注解
- Java注解自定义注解
- Java注解--四种元注解
- Java注解-三种內建注解
- 【Java】【注解】自定义注解
- java注解
- java注解
- java注解
- java 注解
- Java注解
- java 注解
- Java 注解
- Java注解
- java 注解
- JAVA注解
- Java注解
- Java注解
- PDF怎么转换成WORD转换器以及在线转换汇总
- mysql查询查询树结构,通过树结构查询一个自己昵称和父级节点的昵称
- 英语总结—— 翩若惊鸿, 婉若游龙
- poi写出报表
- 最小路径覆盖
- Java 注解
- touchjs
- 各选择器的返回值
- 292. Nim Game
- C++学习笔记-----std::string的=,+,+=对int,char类型操作数的支持
- html2canvas跨域问题的简单解决方法
- jenkins构建自动部署(二)
- python之读写csv文件
- 部署war包到Tomcat