JAVA自定义注解与设计模式(单例、工厂、代理)详解

一. 自定义注解

1.1什么是注解?

Jdk1.5新增新技术,注解。很多框架为了简化代码,都会提供有些注解。可以理解为插件,是代码级别的插件,在类的方法上写:@XXX,就是在代码上插入了一个插件。
注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。
注解分类:内置注解(也成为元注解 jdk 自带注解)、自定义注解(Spring框架)

1.2 什么是内置注解

比如
(1) @SuppressWarnings 再程序前面加上可以在javac编译中去除警告
(2) @Deprecated 带有标记的包,方法,字段说明其过时(一个大的项目后期编写会写新的更好的方法,因此可将旧方法添加过时注解)
(3)@Overricle 打上这个标记说明该方法是将父类的方法重写(不写的话如果与父类方法不同,会被系统识别为新的方法)
1.1 @Overricle 案例演示

@Override
public String toString() {
   
	return null;
}

1.2 @ Deprecated案例演示

@Deprecated
new Date().parse("");

1.3 @ SuppressWarnings 案例演示

@SuppressWarnings({
    "all" })
	public void save() {
   
		java.util.List list = new ArrayList();
	}

1.3 实现自定义注解

元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解
1.@Target
@Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。

  1. CONSTRUCTOR:用于描述构造器
  2. FIELD:用于描述域
  3. LOCAL_VARIABLE:用于描述局部变量
  4. METHOD:用于描述方法
  5. PACKAGE:用于描述包
  6. PARAMETER:用于描述参数
  7. TYPE:用于描述类、接口(包括注解类型) 或enum声明

2.@Retention
表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
3.@Documented
4.@Inherited
代码:
使用@interface 定义注解。

@Target(value = {
    ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface OneAnnotation {
   
int beanId() default 0;
String className() default "";
String[]arrays();
}

使用:

@OneAnnotation(beanId = 123, className = "className", arrays = {
    "111", "222" })
	public void add() {
   
	}

1.4 实现ORM框架映射

完成案例,ORM框架实体类与表字段不一致,底层生成sql语句原理。
1.4.1自定义表映射注解

@Target(value = {
    ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface SetTable {
   
	String value();
}

1.4.2自定义字段属性

@Retention(RetentionPolicy.RUNTIME)
public @interface SetProperty {
   

	String name();

	int leng();
}

1.4.3
自定义注解代码实现

public class Main {
   

	public static void main(String[] args) throws ClassNotFoundException {
   
		// 1.反射class
		Class<?> classForName = Class.forName("com.entity.Sudent");
		// 2.获取表名称注解F
		SetTable setTable = classForName.getAnnotation(SetTable.class);
		// 3.获取所有的成员属性
		Field[] declaredFields = classForName.getDeclaredFields();
		StringBuffer sf = new StringBuffer();
		sf.append(" select ");
		String fromName = se
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值