Java Web:注解,自定義注解,判斷屬性上面是否貼上了col注解,PPT,視頻【詩書畫唱】
每次寫篇專欄就有時要花我大半天,給個三連吧!

本篇可Ctrl+F的關(guān)鍵內(nèi)容:講義,例子,PPT,視頻,判斷屬性上面是否貼上了col注解,進而控制SQL語句。通過反射技術(shù)提取類中的注解,判斷Jobs類是否貼上了Rich注解。
很多東西要自己學(xué)會或想出或找到且記錄后,想出其作用,并且記錄,以后用——詩書畫唱
個人的理解:col注解等是自己命名的注解。
注解本質(zhì)是一個繼承了Annotation的特殊接口,其具體實現(xiàn)類是Java運行時生成的動態(tài)代理類。而我們通過反射獲取注解時,返回的是Java運行時生成的動態(tài)代理對象$Proxy1。通過代理對象調(diào)用自定義注解(接口)的方法,會最終調(diào)用AnnotationInvocationHandler的invoke方法。該方法會從memberValues這個Map中索引出對應(yīng)的值。而memberValues的來源是Java常量池。
個人對元注解的理解:元注解就是修飾注解的注解。有時注解類似類,可以繼承。

@SuppressWarnings("deprecation")? 表示不檢測過期的方法。
我認(rèn)為學(xué)編程時遇到不懂的英文單詞去百度等等,之后記錄可用的百度等的結(jié)果是很好的方法——詩書畫唱
deprecation
n.祈免;貶低;反對
deprecated英[?depr?ke?t?d]美[?depr?ke?t?d]
v.對…表示極不贊成; 強烈反對
注解PPT START





















注解PPT END
講義START

注解就是貼在代碼上的標(biāo)簽annotation
在java代碼中,到處都有注解。servlet的配置,WEBSOCKET,springmvc框架
注解可以理解為標(biāo)簽,標(biāo)簽是可以貼到代碼段上的:
類上面,屬性上,方法上
元注解:貼在標(biāo)簽上的標(biāo)簽,用來描述標(biāo)簽的標(biāo)簽,注解注解的注解
元數(shù)據(jù):描述數(shù)據(jù)的數(shù)據(jù)
鐵帽子王:爵位可以世襲罔替的
提取一個類中的注解,需要使用反射技術(shù)
使用注解來實現(xiàn)新增
講義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");
// //通過反射技術(shù)提取類中的注解
// //判斷Jobs類是否貼上了Rich注解
// boolean isRich = cls.isAnnotationPresent(Rich.class);
// //System.out.println(isRich);
// if(isRich) {//讀取注解上面的內(nèi)容
// //提取出Rich注解
// Rich label = (Rich) cls.getAnnotation(Rich.class);
// System.out.println("資產(chǎn)是:" + 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
通過反射技術(shù)提取類中的注解,判斷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");
//通過反射技術(shù)提取類中的注解
//判斷Jobs類是否貼上了Rich注解
boolean isRich = cls.isAnnotationPresent(Rich.class);
//System.out.println(isRich);
if(isRich) {//讀取注解上面的內(nèi)容
//提取出Rich注解
Rich label = (Rich) cls.getAnnotation(Rich.class);
System.out.println("資產(chǎn)是:" + 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;
//大富豪標(biāo)簽
//大富豪注解是可以繼承的
@Inherited
//將注解保存到代碼運行的時候
@Retention(RetentionPolicy.RUNTIME)
public @interface Rich {
? ? double money() default 40000000000.0;//大富豪的身價
? ? String country() default "中國";//大富豪的國籍
}


package com.jy.bean;
public class Person {
//已經(jīng)棄用的方法
@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;
//大富豪標(biāo)簽
//大富豪注解是可以繼承的
@Inherited
//將注解保存到代碼運行的時候
@Retention(RetentionPolicy.RUNTIME)
public @interface Rich {
? ? double money() default 40000000000.0;//大富豪的身價
? ? String country() default "中國";//大富豪的國籍
}


通過反射技術(shù)提取類中的注解,判斷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)//這個標(biāo)簽只能貼在屬性上面
@Retention(RetentionPolicy.RUNTIME)//標(biāo)簽存活到運行時
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;
//段子手標(biāo)簽
@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