Java Web:注解,自定义注解,判断属性上面是否贴上了col注解,PPT,视频【诗书画唱】
每次写篇专栏就有时要花我大半天,给个三连吧!

本篇可Ctrl+F的关键内容:讲义,例子,PPT,视频,判断属性上面是否贴上了col注解,进而控制SQL语句。通过反射技术提取类中的注解,判断Jobs类是否贴上了Rich注解。
很多东西要自己学会或想出或找到且记录后,想出其作用,并且记录,以后用——诗书画唱
个人的理解:col注解等是自己命名的注解。
注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。而我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象$Proxy1。通过代理对象调用自定义注解(接口)的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池。
个人对元注解的理解:元注解就是修饰注解的注解。有时注解类似类,可以继承。

@SuppressWarnings("deprecation") 表示不检测过期的方法。
我认为学编程时遇到不懂的英文单词去百度等等,之后记录可用的百度等的结果是很好的方法——诗书画唱
deprecation
n.祈免;贬低;反对
deprecated英[ˈdeprəkeɪtɪd]美[ˈdeprəkeɪtɪd]
v.对…表示极不赞成; 强烈反对
注解PPT START





















注解PPT END
讲义START

注解就是贴在代码上的标签annotation
在java代码中,到处都有注解。servlet的配置,WEBSOCKET,springmvc框架
注解可以理解为标签,标签是可以贴到代码段上的:
类上面,属性上,方法上
元注解:贴在标签上的标签,用来描述标签的标签,注解注解的注解
元数据:描述数据的数据
铁帽子王:爵位可以世袭罔替的
提取一个类中的注解,需要使用反射技术
使用注解来实现新增
讲义END
例子START





个人对元注解的理解:元注解就是修饰注解的注解。注解也是类,可以继承。


判断属性上面是否贴上了col注解,进而控制SQL语句START




import java.util.ArrayList;
import java.util.List;
import com.jy.anno.Rich;
import com.jy.bean.Person;
import com.jy.bean.User;
import com.jy.bean.Userinfo;
import com.jy.dao.BaseDao;
public class Test {
@SuppressWarnings(value = { "deprecation" })
public static void main(String[] args) {
// Person p = new Person();
// p.zangai();
//
// try {
// Class cls = Class.forName("com.jy.bean.Mayun");
// //通过反射技术提取类中的注解
// //判断Jobs类是否贴上了Rich注解
// boolean isRich = cls.isAnnotationPresent(Rich.class);
// //System.out.println(isRich);
// if(isRich) {//读取注解上面的内容
// //提取出Rich注解
// Rich label = (Rich) cls.getAnnotation(Rich.class);
// System.out.println("资产是:" + label.money());
// System.out.print("国籍是:" + label.country());
// }
// } catch (ClassNotFoundException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// BaseDao<Userinfo> bd = new BaseDao<Userinfo>();
// Userinfo u = new Userinfo();
// bd.add(u);
BaseDao<User> dao = new BaseDao<User>();
User user = new User();
dao.add(user);
}
}


package com.jy.bean;
import com.jy.anno.Col;
public class User {
private Integer id;
@Col
private String act;
@Col
private String pwd;
@Col
private String birth;
@Col
private String sex;
@Col
private String hobbys;
private Integer page;
private Integer row;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAct() {
return act;
}
public void setAct(String act) {
this.act = act;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getHobbys() {
return hobbys;
}
public void setHobbys(String hobbys) {
this.hobbys = hobbys;
}
public Integer getPage() {
return page;
}
public void setPage(Integer page) {
this.page = page;
}
public Integer getRow() {
return row;
}
public void setRow(Integer row) {
this.row = row;
}
}


package com.jy.dao;
import java.lang.reflect.Field;
import com.jy.anno.Col;
public class BaseDao<T> {
public Integer add(T t){
//获取bean类中的属性名
Class cls = t.getClass();
//insert into userinfo (act,pwd) values(?,?)
//获取表名
String tableName = cls.getSimpleName();
String sql = "insert into " + tableName + "(";
String txt = "(";
Field []fs = cls.getDeclaredFields();
String dot = "";
for(int i = 0;i < fs.length;i ++) {
Field f = fs[i];
String fname = f.getName();
//判断属性上面是否贴上了col注解
if(f.isAnnotationPresent(Col.class)){
sql += dot;
sql += fname;
txt += dot;
txt += "?";
dot = ",";
}
}
sql += ") values";
txt += ")";
System.out.println(sql + txt);
return 0;
}
}


判断属性上面是否贴上了col注解END
判断属性上面是否贴上了col注解2START



package com.jy.bean;
import com.jy.anno.Col;
public class Userinfo {
private Integer id;
@Col
private String act;
@Col
private String pwd;
private Integer pageNum;
private Integer pageSize;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAct() {
return act;
}
public void setAct(String act) {
this.act = act;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}


package com.jy.bean;
import com.jy.anno.Col;
public class Userinfo {
private Integer id;
@Col
private String act;
@Col
private String pwd;
private Integer pageNum;
private Integer pageSize;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAct() {
return act;
}
public void setAct(String act) {
this.act = act;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}


判断属性上面是否贴上了col注解2END
通过反射技术提取类中的注解,判断Jobs类是否贴上了Rich注解START

import java.util.ArrayList;
import java.util.List;
import com.jy.anno.Rich;
import com.jy.bean.Person;
import com.jy.bean.User;
import com.jy.bean.Userinfo;
import com.jy.dao.BaseDao;
public class Test {
@SuppressWarnings(value = { "deprecation" })
public static void main(String[] args) {
Person p = new Person();
p.zangai();
try {
Class cls = Class.forName("com.jy.bean.Mayun");
//通过反射技术提取类中的注解
//判断Jobs类是否贴上了Rich注解
boolean isRich = cls.isAnnotationPresent(Rich.class);
//System.out.println(isRich);
if(isRich) {//读取注解上面的内容
//提取出Rich注解
Rich label = (Rich) cls.getAnnotation(Rich.class);
System.out.println("资产是:" + label.money());
System.out.print("国籍是:" + label.country());
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/* BaseDao<Userinfo> bd = new BaseDao<Userinfo>();
Userinfo u = new Userinfo();
bd.add(u);*/
/* BaseDao<User> dao = new BaseDao<User>();
User user = new User();
dao.add(user);*/
}
}


package com.jy.anno;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
//大富豪标签
//大富豪注解是可以继承的
@Inherited
//将注解保存到代码运行的时候
@Retention(RetentionPolicy.RUNTIME)
public @interface Rich {
double money() default 40000000000.0;//大富豪的身价
String country() default "中国";//大富豪的国籍
}


package com.jy.bean;
public class Person {
//已经弃用的方法
@Deprecated
public void zangai(){
System.out.println("为你放弃整个世界");
}
}


package com.jy.anno;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
//大富豪标签
//大富豪注解是可以继承的
@Inherited
//将注解保存到代码运行的时候
@Retention(RetentionPolicy.RUNTIME)
public @interface Rich {
double money() default 40000000000.0;//大富豪的身价
String country() default "中国";//大富豪的国籍
}


通过反射技术提取类中的注解,判断Jobs类是否贴上了Rich注解END

package com.jy.anno;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)//这个标签只能贴在属性上面
@Retention(RetentionPolicy.RUNTIME)//标签存活到运行时
public @interface Col {
}


package com.jy.anno;
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.TYPE)
public @interface Duanzishou {
}


package com.jy.anno;
public @interface Good {
}


package com.jy.bean;
import com.jy.anno.Rich;
@Rich(money=27000000000.0,country="美国")
public class Jobs {
}


package com.jy.bean;
import com.jy.anno.Rich;
@Rich
public class Mayun {
}


package com.jy.bean;
import com.jy.anno.Duanzishou;
//QQ好友
//1
@Duanzishou
public class QQFriend {
//4
public QQFriend(){
}
//2
private String name;
//3
public void say(String act){
System.out.println("Hello world");
}
}


package com.jy.bean;
//我是富二代,可以继承@Rich注解
public class Son extends Jobs {
}

例子END
视频START


视频END