Java Annotation(Java 注解)的實(shí)現(xiàn)代碼
如果你想知道java annotation是什么?你可以先看看:“http://www.infoq.com/articles/Annotation-Hammer”
下面是我做的一個(gè)demo:
項(xiàng)目結(jié)構(gòu):
運(yùn)行效果:
====================================================
代碼部分:
注:很多人會(huì)考慮這個(gè)問(wèn)題,“這樣做的目的是什么?我們可以做一個(gè)配置文件(xml,properties等),不是比這個(gè)跟方便...或者說(shuō)
直接把我們的配置信息寫(xiě)入程序...這樣也不會(huì)去解析我們寫(xiě)的注釋..”
但是annotation和xml,properties等配置文件的優(yōu)缺點(diǎn)是什么呢..
個(gè)人觀點(diǎn):寫(xiě)注釋的時(shí)候,比較方便...可以提高開(kāi)發(fā)的效率.有用到注釋的框架,如:Hibernate,Struts,Spring等
回到原話(huà)題,“這樣做的目的是什么?“---這里只是做一個(gè)demo,讓大家知道annotation是怎么一回事兒....在很多我們開(kāi)發(fā)的
過(guò)程中,很少用到我們自己定義的注釋(Annotation),如果真的用到了,那么這篇blog也許就有幫助了..^_^
====================================================
/java_annotation/src/com/b510/hongten/annotation/JDBCAnnotation.java
/**
*
*/
package com.b510.hongten.annotation;
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;
/**
* JDBC annotation
*
* @author Hongten
* @date 2013-4-10
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface JDBCAnnotation {
String driver() default "com.mysql.jdbc.Driver";
String dbName() default "";
String encoding() default "UTF-8";
String port() default "3306";
String host() default "localhost";
String userName() default "root";
String password() default "";
}
/java_annotation/src/com/b510/hongten/jdbc/JDBCUtil.java
/**
*
*/
package com.b510.hongten.jdbc;
import com.b510.hongten.annotation.JDBCAnnotation;
/**
* @author Hongten
* @date 2013-4-12
*/
@JDBCAnnotation(dbName = "db_lucene", port = "3306", host = "192.168.0.119", userName = "root", password = "root")
public class JDBCUtil {
private static String driver;
private static String dbName;
private static String encoding;
private static String port;
private static String host;
private static String passwrod;
private static String userName;
private static String url;
public void checkInterceptor(Class<?> cl) throws Exception {
boolean flag = cl.isAnnotationPresent(JDBCAnnotation.class);
if (flag) {
JDBCAnnotation jdbcAnnotation = 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加載注釋完成...");
}
}
public JDBCUtil() {
try {
checkInterceptor(JDBCUtil.class);
} catch (Exception e) {
e.printStackTrace();
}
}
public static String getDriver() {
return driver;
}
public static void setDriver(String driver) {
JDBCUtil.driver = driver;
}
public static String getDbName() {
return dbName;
}
public static void setDbName(String dbName) {
JDBCUtil.dbName = dbName;
}
public static String getEncoding() {
return encoding;
}
public static void setEncoding(String encoding) {
JDBCUtil.encoding = encoding;
}
public static String getPort() {
return port;
}
public static void setPort(String port) {
JDBCUtil.port = port;
}
public static String getHost() {
return host;
}
public static void setHost(String host) {
JDBCUtil.host = host;
}
public static String getPasswrod() {
return passwrod;
}
public static void setPasswrod(String passwrod) {
JDBCUtil.passwrod = passwrod;
}
public static String getUserName() {
return userName;
}
public static void setUserName(String userName) {
JDBCUtil.userName = userName;
}
public static String getUrl() {
return url;
}
public static void setUrl(String url) {
JDBCUtil.url = url;
}
}
/java_annotation/src/com/b510/hongten/jdbc/JDBCTest.java
/**
*
*/
package com.b510.hongten.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
*
* @author Hongten</br>
* @date 2012-7-16
*
*/
public class JDBCTest {
@SuppressWarnings("static-access")
public static void main(String[] args) {
JDBCUtil jdbcUtil = new JDBCUtil();
String sql = "select * from mymails";
try {
Class.forName(jdbcUtil.getDriver());
Connection conn = DriverManager.getConnection(jdbcUtil.getUrl(), jdbcUtil.getUserName(), jdbcUtil.getPasswrod());
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
System.out.println("id : " + rs.getInt(1) + " name : " + rs.getString(2) + " mail : " + rs.getString(3));
}
// 關(guān)閉記錄集
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 關(guān)閉聲明
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 關(guān)閉鏈接對(duì)象
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
相關(guān)文章
Java+JFrame實(shí)現(xiàn)貪吃蛇小游戲
這篇文章主要為大家詳細(xì)介紹了Java+JFrame實(shí)現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06springboot?整合?dubbo?的實(shí)現(xiàn)組聚合詳情
這篇文章主要介紹了springboot整合dubbo的實(shí)現(xiàn)組聚合詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07Java C++題解leetcode816模糊坐標(biāo)示例
這篇文章主要為大家介紹了Java C++題解leetcode816模糊坐標(biāo)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01Java實(shí)現(xiàn)AES/CBC/PKCS7Padding加解密的方法
這篇文章主要介紹了Java實(shí)現(xiàn)AES/CBC/PKCS7Padding加解密的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08java web開(kāi)發(fā)中大量數(shù)據(jù)導(dǎo)出Excel超時(shí)(504)問(wèn)題解決
開(kāi)發(fā)測(cè)試時(shí)候?qū)霐?shù)據(jù)遇到大數(shù)據(jù)導(dǎo)入的問(wèn)題,整理了下,需要的朋友可以參考下2017-04-04淺談Java數(shù)組的一些使用方法及堆棧存儲(chǔ)
下面小編就為大家?guī)?lái)一篇淺談Java數(shù)組的一些使用方法及堆棧存儲(chǔ)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07java validation 后臺(tái)參數(shù)驗(yàn)證的使用詳解
本篇文章主要介紹了java validation 后臺(tái)參數(shù)驗(yàn)證的使用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10