zl程序教程

您现在的位置是:首页 >  后端

当前栏目

JavaAnnotation(Java注解)的实现代码

JAVA代码 实现 注解
2023-06-13 09:14:52 时间

如果你想知道javaannotation是什么?你可以先看看:“http://www.infoq.com/articles/Annotation-Hammer”

下面是我做的一个demo:

项目结构:

运行效果:

====================================================

代码部分:

注:很多人会考虑这个问题,“这样做的目的是什么?我们可以做一个配置文件(xml,properties等),不是比这个跟方便...或者说

直接把我们的配置信息写入程序...这样也不会去解析我们写的注释..”

但是annotation和xml,properties等配置文件的优缺点是什么呢..

个人观点:写注释的时候,比较方便...可以提高开发的效率.有用到注释的框架,如:Hibernate,Struts,Spring等

回到原话题,“这样做的目的是什么?“---这里只是做一个demo,让大家知道annotation是怎么一回事儿....在很多我们开发的

过程中,很少用到我们自己定义的注释(Annotation),如果真的用到了,那么这篇blog也许就有帮助了..^_^

====================================================

/java_annotation/src/com/b510/hongten/annotation/JDBCAnnotation.java
复制代码代码如下:


/**
 *
 */
 packagecom.b510.hongten.annotation;

 importjava.lang.annotation.Documented;
 importjava.lang.annotation.ElementType;
 importjava.lang.annotation.Retention;
 importjava.lang.annotation.RetentionPolicy;
 importjava.lang.annotation.Target;

 /**
 *JDBCannotation
 *
 *@authorHongten
 *@date2013-4-10
 */
 @Documented
 @Retention(RetentionPolicy.RUNTIME)
 @Target(ElementType.TYPE)
 public@interfaceJDBCAnnotation{

    Stringdriver()default"com.mysql.jdbc.Driver";

    StringdbName()default"";

    Stringencoding()default"UTF-8";

    Stringport()default"3306";

    Stringhost()default"localhost";

    StringuserName()default"root";

    Stringpassword()default"";

 }

/java_annotation/src/com/b510/hongten/jdbc/JDBCUtil.java
复制代码代码如下:

/**
 *
 */
 packagecom.b510.hongten.jdbc;

 importcom.b510.hongten.annotation.JDBCAnnotation;

 /**
 *@authorHongten
 *@date2013-4-12
 */
 @JDBCAnnotation(dbName="db_lucene",port="3306",host="192.168.0.119",userName="root",password="root")
 publicclassJDBCUtil{

    privatestaticStringdriver;
    privatestaticStringdbName;
    privatestaticStringencoding;
    privatestaticStringport;
    privatestaticStringhost;
    privatestaticStringpasswrod;
    privatestaticStringuserName;
    privatestaticStringurl;

    publicvoidcheckInterceptor(Class<?>cl)throwsException{
        booleanflag=cl.isAnnotationPresent(JDBCAnnotation.class);
        if(flag){
            JDBCAnnotationjdbcAnnotation=cl.getAnnotation(JDBCAnnotation.class);
            driver=jdbcAnnotation.driver();
            dbName=jdbcAnnotation.dbName();
            encoding=jdbcAnnotation.encoding();
            port=jdbcAnnotation.port();
            host=jdbcAnnotation.host();
            userName=jdbcAnnotation.userName();
            passwrod=jdbcAnnotation.password();
            url="jdbc:mysql://"+host+":"+port+"/"+dbName+"?characterEncoding="+encoding;
            System.out.println("JDBCUtil加载注释完成...");
        }
    }

    publicJDBCUtil(){
        try{
            checkInterceptor(JDBCUtil.class);
        }catch(Exceptione){
            e.printStackTrace();
        }
    }

    publicstaticStringgetDriver(){
        returndriver;
    }

    publicstaticvoidsetDriver(Stringdriver){
        JDBCUtil.driver=driver;
    }

    publicstaticStringgetDbName(){
        returndbName;
    }

    publicstaticvoidsetDbName(StringdbName){
        JDBCUtil.dbName=dbName;
    }

    publicstaticStringgetEncoding(){
        returnencoding;
    }

    publicstaticvoidsetEncoding(Stringencoding){
        JDBCUtil.encoding=encoding;
    }

    publicstaticStringgetPort(){
        returnport;
    }

    publicstaticvoidsetPort(Stringport){
        JDBCUtil.port=port;
    }

    publicstaticStringgetHost(){
        returnhost;
    }

    publicstaticvoidsetHost(Stringhost){
        JDBCUtil.host=host;
    }

    publicstaticStringgetPasswrod(){
        returnpasswrod;
    }

    publicstaticvoidsetPasswrod(Stringpasswrod){
        JDBCUtil.passwrod=passwrod;
    }

    publicstaticStringgetUserName(){
        returnuserName;
    }

    publicstaticvoidsetUserName(StringuserName){
        JDBCUtil.userName=userName;
    }

    publicstaticStringgetUrl(){
        returnurl;
    }

    publicstaticvoidsetUrl(Stringurl){
        JDBCUtil.url=url;
    }

    
 }

/java_annotation/src/com/b510/hongten/jdbc/JDBCTest.java
复制代码代码如下:
/**
 *
 */
 packagecom.b510.hongten.jdbc;

 importjava.sql.Connection;
 importjava.sql.DriverManager;
 importjava.sql.PreparedStatement;
 importjava.sql.ResultSet;
 importjava.sql.SQLException;

 /**
 *
 *@authorHongten</br>
 *@date2012-7-16
 *
 */
 publicclassJDBCTest{
    @SuppressWarnings("static-access")
    publicstaticvoidmain(String[]args){
        JDBCUtiljdbcUtil=newJDBCUtil();
        Stringsql="select*frommymails";
        try{
            Class.forName(jdbcUtil.getDriver());
            Connectionconn=DriverManager.getConnection(jdbcUtil.getUrl(),jdbcUtil.getUserName(),jdbcUtil.getPasswrod());
            PreparedStatementps=conn.prepareStatement(sql);
            ResultSetrs=ps.executeQuery();
            while(rs.next()){
                System.out.println("id:"+rs.getInt(1)+"name:"+rs.getString(2)+"mail:"+rs.getString(3));
            }
            //关闭记录集
            if(rs!=null){
                try{
                    rs.close();
                }catch(SQLExceptione){
                    e.printStackTrace();
                }
            }

            //关闭声明
            if(ps!=null){
                try{
                    ps.close();
                }catch(SQLExceptione){
                    e.printStackTrace();
                }
            }

            //关闭链接对象
            if(conn!=null){
                try{
                    conn.close();
                }catch(SQLExceptione){
                    e.printStackTrace();
                }
            }
        }catch(Exceptione){
            e.printStackTrace();
        }
    }

 }