栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中注解的定义和应用—Annotation

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中注解的定义和应用—Annotation

注释(解释 说明 自己 别人留着的)
Java中的注解 Annotation(含有很多信息)

数组[]
类class 抽象类abstract 接口interface
注解@interface(从定义上 可以类比接口的定义特点 ) 枚举enum
如何自己定义注解
如何自己解析注解(信息)

变量
数组
集合

文件
数据库

不能停留于业务上,要往高的维度上去考虑,统筹地规划给别人解决问题的时候,站在一个高度上。
写完的代码不是为某一个程序服务的,是为了很多人服务的,
解决复用性、健壮性、解决灵活性、可扩展性,
包括解决内存当中的性能问题,这些是我们当中的设计而不仅仅是代码的实现功能。
而不应停留于代码的应用层面,写完的代码,底层的思想是什么样的呢。

package  test;

import annotation.MyAnnotation;

public class Person{//用来描述好多人的  抽象的概念
	//属性
	public String name;
	public String sex;
	public String age;
	
	//构造方法
	//1.每一个类都有一个默认无参数的构造方法---默认存在
	//2.构造方法也是方法    也存在构造方法重载

	//使用我们自己创建的注解
	@MyAnnotation(value={"某某","男","18"})
	public Person(){}
	public Person(String name,String sex,String age){
		this.name=name;
		this.sex=sex;
		this.age=age;
	}
	
	@Override
	public String toString() {
		return "Person [name=" + name + ", sex=" + sex + ", age=" + age + "]";
	}
	//方法
	public void eat(){
		System.out.println("人类吃饭的方法");
	}
	
}
package test;

import annotation.ReadAnnotation;

public class TestMain{
	public static void main(String[] args){
		//1.创建对象
		//Person p=new Person();//具体的对象
		//2.调用属性  存值取值了
		//p.name="某某";
		//p.age=18;
		//p.sex="男";
		

		//第二种方式  利用构造方法传参数  创建对象
		//Person p=new person("某某",18,"男");

		//第三种方式  只创建一个对象  对象不是我们创建  别人创建
		//创建对象的同时  自动赋值
		//Person p=new Person();//就有属性值了    IOC  ,DI设计思想
		//调用这个构造方法  方法的上面多了一个注解  注解里面还存有数据   外部类等可以用反射去读取数据ReadAnnotation类


		//3.调用方法、执行
		//p.eat();

		//如果采用上述的方法给对象赋值    创建对象+属性赋值==4行代码
		//构造方法    构造对象的同时做一些事情  创建对象+属性赋值==1行

		//构造方法传递的参数值很重要
		//赋值过程就简单了
		//参数临时的存储----参数存入集合  参数值存入文件(文件永久性保存)
		//domain实体对象-----构造数据是从文件中读取出来   I/O   很多不同类   读取    解析
		//数据库   为了让整个设计变得更加灵活    配置文件   properties   xml
			
		//在某一个位置添加一个小小的说明----带着一些数据
		//注解产生——几个作用
		//1.充当注解(仅仅是个说明  //)
		//2.目的是为了编译时做一些检测   @Override
		//    方法重写的时候   遵循很多规则  名字,参数列表必须与父类一致  修饰符  返回类型   异常
		//    public class MyClass  extends  Thread{
		//			@Override	
		//    		public void run(){
		//				//里面做的事情需要一些条件  Socket
		//			}
		//    }
		//3.做后端开发   最主要的是数据   其次注意的是业务逻辑
		//数据  (变量  数组  集合  对象)--临时
		//数据  (文件txt  properties   xml  数据库)--永久   需要用I/O去读  解析  JDBC
		//数据   (注解--跟代码在一起  改不了  可读性方便   小的数据注解里)
		//注解用来存储和传递数据
		
		//Spring框架  IOC控制反转  DI  AOP  JDBC  MVC
		//IOC设计思想是对象的创建交给别人来管理  对象的控制权反转  自己创建  交给别人创建
		//对象中是存在属性的  别人给我创建对象还不够   对象中属性需要值
		//DI设计思想  别人给我创建对象的同时  帮我将对象的属性值注入了进去(赋值)
		
		ReadAnnotation r=new ReadAnnotation();
		Person p=r.getBean(Person.class);
		//什么样的东西会IOC?
		//Controller  Service  Dao这样的对象都可以交给Spring来管理
		//通常是Controller对象里面有一个service当属性,Service对象里面有一个Dao当属性,Dao对象里面有可能有一个sercol当属性.
		//要一个Controller,controller里面其它的一套都有了,DI很强大。自动匹配,大量反射和注解。
		//注解是xml的代替方案
		//注解好在写起来简单,注解跟正常属性、方法在一起可读性增强,注解一个一个的。
		//注解不好在于写完代码改不了,在一起打成包怎么改。
		//xml好处在于,打成包以后,代码不能动,但xml文件内容还可以动。文件仍然可以改的。
		//xml不好在于它结构过于庞大。一个文件全在这里。文件统一规则。
		System.out.println(p);
	}
}
package  annotation;
//自己规定了一个结构  不足以说自己是一个注解
//需要大佬给你一个认证  给认证的大佬也是注解(元注解)
//1.注解放在什么地方使用(类  属性  方法  构造方法  参数)
//2.注解的生命周期(源代码  字节码  内存类中)

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

//可否继承用这个元注解@Tnherited
//@documented
@Target(value = {ElementType.CONSTRUCTOR,ElementType.FIELD})//放在什么地方用:数组用在构造方法{[ElementType.CONSTRUCTOR]}、并且该数组用在属性值上ElementType.FIELD。如果不是数组,可去掉大括号。
//Annotation是在类上或接口上使用
@Retention(value =RetentionPolicy.RUNTIME)//注解的生命周期 有三个值:Class字节码  runtime运行时类  source源代码
//只有Runtime生命周期才能携带信息   被我们返问
//只有一个参数,并且参数为value时,value可省略
public  @interface  MyAnnotation{
	//定义的写法---可以类比接口的写法  不一样
	//接口是为了定义规则  注解是为了存储和传递信息
	
	//接口
	//1.接口里面有什么
	//    属性    必须共有  静态  常量
	//   方法   必须共有   抽象
	//   代码块   没有
	//   构造方法   没有
	//2.是否能创建对象
	//不能创建对象
	//3.与别的类(抽象  接口)之间的关系
	//接口只能是别的类来实现我

	//注解
	//长得跟接口很像
	//public static final  int test=10;//不常用  注解是为了存储和携带信息(不能一致)
	//通常省了前面的修饰符public  abstract
	
	String[] value();
	
	//int test();//必须有返回值  void不行  基本类型  String  枚举   注解  数组[加上那些]
	//抽象方法    注解的方法恰恰是为了做事用   帮我们传递数据
	//用户给的数据------参数   注解的方法就是解析
	//注解自己不处理数据   数据的搬运工  数据给别人处理(返回值)
	
	//自定义异常   自己写一个类   需要继承
}
package annotation;

import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class ReadAnnotation{

	public T getBean(Class clazz){
		Object obj=null;
		try{
			//clazz那个类(Person)
			//1.clazz类的构造方法上面
			Constructor con=clazz.getConstructor();
			obj=con.newInstance();//构造方法创建一个对象
			//2.通过构造方法找寻上面的注解
			Annotation  anno=con.getAnnotation(MyAnnotation.class);
			//3.将anno对象还原为真实类型
			//方式一:对象调用
			//MyAnnotation  ma=(MyAnnotation)anno;
			//String[] value=ma.value();
			//方式二:反射操作  
			Class annoClass=anno.getClass();//获取注解类
			Method method=annoClass.getMethod("value");
			String[] value=(String[]) method.invoke(anno);
			//遍历value数据
			for(int i=0;i
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/531605.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号