First Annotation Demo

前段时间用Hibernate时用注解(即annotation)的方式来定义元数据的映射,一直都很想知道annotation是怎么实现的,今天终于做了一个自己的annotation demo

1、定义一个annotation的接口

package annotation.test;

/**
 * @author longtop
 * 
 */
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Description {
	String column();

	String comment();
}

 

2、在类中引用annotation

package annotation.test;

public class TableTest {
	public String id;
	public String name;

	@Description(column = "id",comment="主键")
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	@Description(column = "name", comment = "用户名")
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

 

3、一个测试类,取出annotation定义的元数据

package annotation.test;

import java.lang.reflect.Method;

public class Test {
	public static void main(String[] args) {
		String className = "annotation.test.TableTest";
		try {
			Class tableTest = Class.forName(className);

			Method[] method = tableTest.getMethods();
			Description des = null;
			for (int i = 0; i < method.length; i++) {
				Method meth = method[i];
				if (meth.isAnnotationPresent(Description.class)) {
					des = meth.getAnnotation(Description.class);
					//System.out.println(des.annotationType());
					System.out.println(des.column() + "  :  " + des.comment());
				}
			}

		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

还有什么高级的应用,请大家不吝赐教阿。

资源下载链接为: https://pan.quark.cn/s/3d8e22c21839 随着 Web UI 框架(如 EasyUI、JqueryUI、Ext、DWZ 等)的不断发展与成熟,系统界面的统一化设计逐渐成为可能,同时代码生成器也能够生成符合统一规范的界面。在这种背景下,“代码生成 + 手工合并”的半智能开发模式正逐渐成为新的开发趋势。通过代码生成器,单表数据模型以及一对多数据模型的增删改查功能可以被直接生成并投入使用,这能够有效节省大约 80% 的开发工作量,从而显著提升开发效率。 JEECG(J2EE Code Generation)是一款基于代码生成器的智能开发平台。它引领了一种全新的开发模式,即从在线编码(Online Coding)到代码生成器生成代码,再到手工合并(Merge)的智能开发流程。该平台能够帮助开发者解决 Java 项目中大约 90% 的重复性工作,让开发者可以将更多的精力集中在业务逻辑的实现上。它不仅能够快速提高开发效率,帮助公司节省大量的人力成本,同时也保持了开发的灵活性。 JEECG 的核心宗旨是:对于简单的功能,可以通过在线编码配置来实现;对于复杂的功能,则利用代码生成器生成代码后,再进行手工合并;对于复杂的流程业务,采用表单自定义的方式进行处理,而业务流程则通过工作流来实现,并且可以扩展出任务接口,供开发者编写具体的业务逻辑。通过这种方式,JEECG 实现了流程任务节点和任务接口的灵活配置,既保证了开发的高效性,又兼顾了项目的灵活性和可扩展性。
虽然提供的参考资料主要聚焦于 InfluxDB 生态及其应用[^1],对于在 Spring Boot 项目中实现约瑟夫环问题的解决方案或示例代码的需求,可以基于常见的算法实践来提供指导。 Josephus 问题是一个经典的理论计算机科学难题。下面展示的是如何在一个 Spring Boot 应用程序环境中解决此问题的方法之一: ### 使用链表模拟约瑟夫环 通过创建一个循环单向链表表示圆圈中的所有人,并按照给定规则移除节点直到只剩下一个节点为止的方式求解 Josephus 位置。 #### 创建一个新的 Spring Boot 控制器用于处理请求 ```java package com.example.demo.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class JosephusController { @GetMapping("/josephus") public String getJosephusPosition(@RequestParam int n, @RequestParam int m) { Node last = null; for (int i = 1; i <= n; ++i) { // 构建循环链表 if (last == null) { last = new Node(i); last.next = last; } else { Node newNode = new Node(i); newNode.next = last.next; last.next = newNode; last = newNode; } } Node first = last.next; while (first != first.next) { // 开始报数并淘汰人员 for (int count = 1; count < m - 1; ++count) { last = first; first = first.next; } System.out.println("Removed: " + first.value); // 输出被淘汰的人编号 last.next = first.next; first = last.next; } return "The survivor is at position: " + first.value; } private static class Node { final int value; Node next; Node(int val) { this.value = val; } } } ``` 这段代码定义了一个简单的 RESTful Web Service 接口 `/josephus` ,它接收两个参数 `n`(总人数) 和 `m`(计数值),返回最后存活者的初始位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值