javaweb-注解

1.注解的概述:

  • 从JDK5.0开始,Java增加了对元数据(描述数据的数据称之为元数据)的支持,也就是Annotation(注释)
  • Annotation其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。
  • Annotation和类 接口同级

2.注解的格式:


   @interface 注解名{}

3.注解的作用:

 

  •         编译检查@override的那种
  •         替代配置文件
  •         定义注解(元注解:注解上的注解)
  •         分析代码(用到反射)

4. java中3个注解(理解)


        @Override:声明该方法是从分类上继承过来的,执行编译期的检查
        @SuppressWarnings:抑制警告 值有好多,只需要知道一个 all  抑制所有的警告
        @Deprecated:用来声明 该方法不赞成使用(要么过时要么有bug)                                                                                           编译器会给把代码中间写个横线用来提示不赞成使用

 5.自定义注解

        注解属性:
            注解本质就是一个接口,接口中可以有常量和抽象方法
            抽象方法在注解中就称之为注解属性

        注解属性类型:
            基本类型
            String
            Class
            Annotation
            Enum:枚举
            以上类型对应的一维数组

        注意:
            一旦注解有属性了,使用注解的时候必须赋值,(除非这个注解属性有默认值)

        赋值的格式:
            @注解名(属性名=属性值)
            若注解类型为数组,且只有一个值的时候,可以有两种写法
                方式1:
                    属性名 = { 值 }
                方式2:
                    属性名=属性值
            若属性名为value的时候,且只需要为这个value属性赋值的时候,value可以省略

 

6.元注解:

        定义在注解上的注解
            @Retention  规定注解保留到什么阶段  值为RetentionPolicy的三个枚举值
                SOURCE:只在代码中保留,在字节码文件中就删除了
                CLASS:在代码和字节码文件中保留
                RUNTIME:所有阶段都保留
            
            @Target 规定注解作用在什么上面     值为ElementType的枚举值
                TYPE:作用在类 接口 等上面
                METHOD:作用方法上面
                FIELD:作用字段上面

加上的注解默认是在源码阶段有,想要在runtime时候有加上 RUNTIME:

7.案例实现-模拟Junit测试

通过反射思想来获取字节码对象

然后通过字节码对象获取全部的方法

然后再获取带有注解的方法

最后m.invoke就可以执行了

package com.itheima.a_annotation;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class MainTest {
	
	public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {
		//运行这个类的时候 需要将 测试类中带有@mytest所有方法执行
		//获取字节码对象★★★
		Class clazz=MyTestTest.class;
		
		//获取所有的方法
		Method[] arr = clazz.getMethods();
		
		//让带有注解的方法执行
		for (Method m : arr) {
			//获取有注解的方法
			
			//判断方法是否有指定的注解 
			boolean flag=m.isAnnotationPresent(MyTest.class);
			if(flag){
				//System.out.println(m.getName());
				m.invoke(clazz.newInstance());//★★★
			}
		}
	}
}

 

8.案例实现获得连接:(替代配置文件)


通过注解来获取配置文件

    1.自定义一个注解JDBCInfo
        添加元注解:
            在程序运行的时候使用  @Retention
            只能作用在方法上      @Target
        添加注解属性
            String driverClass() default "com.mysql.jdbc.Driver";
            String url();
            String username() default "root";
            String password();
    2.在jdbcutils工具类中提供一个getConnection,在方法上面添加一个注解 @JDBCInfo(...) 
        getConnection方法需要进行的操作:获取注解上的四个属性值
            获取字节码文件
            获取该方法上的注解
            获取注解的值
    3.运行的时候可以通过getConnection获取一个连接

代码实现:

step1;定义一个info注解

package com.javaweb.annotationPlus;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)//★★★
@Target(ElementType.METHOD)//★★
public @interface JdbcInfo {
	String driverClass() default "com.mysql.jdbc.Driver";
	String url();
	String user() default "root";
	String password() default "root";

}

step2定义一个类叫做jdbcutils

package com.itheima.a_annotation.plus;

import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;

public class JdbcUtils {
	@JdbcInfo(url = "jdbc:mysql://localhost:3306/day16",password="1234")
	public static Connection getConnection() throws Exception{
		//1.获取字节码文件
		Class clazz=JdbcUtils.class;★★★
		
		//2.获取getConnenction
		Method m = clazz.getMethod("getConnection");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值