<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                > 在本例中,把數據庫連接的工具類DBUtil改造成為注解的方式,來舉例演示怎么自定義注解以及如何解析這些自定義注解 # 步驟 1 : 非注解方式DBUtil 通常來講,在一個基于JDBC開發的項目里,都會有一個DBUtil這么一個類,在這個類里統一提供連接數據庫的IP地址,端口,數據庫名稱, 賬號,密碼,編碼方式等信息。如例所示,在這個DBUtil類里,這些信息,就是以屬性的方式定義在類里的。 大家可以運行試試,運行結果是獲取一個連接數據庫test的連接Connection實例。 ``` package com.dodoke.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBUtil { static String ip = "127.0.0.1"; static int port = 3306; static String database = "test"; static String encoding = "UTF-8"; static String loginName = "root"; static String password = "123456"; static { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection() throws SQLException { String url = String.format("jdbc:mysql://%s:%d/%s?characterEncoding=%s", ip, port, database, encoding); return DriverManager.getConnection(url, loginName, password); } public static void main(String[] args) throws SQLException { System.out.println(getConnection()); } } ``` # 自定義注解@JDBCConfig 接下來,就要把DBUtil這個類改造成為支持自定義注解的方式。 首先創建一個注解JDBCConfig 1. 創建注解類型的時候即不使用class也不使用interface,而是使用@interface ``` public @interface JDBCConfig ``` 2. 元注解 `@Target({METHOD,TYPE})` 表示這個注解可以用用在類/接口上,還可以用在方法上 `@Retention(RetentionPolicy.RUNTIME) `表示這是一個運行時注解,即運行起來之后,才獲取注解中的相關信息,而不像基本注解如@Override 那種不用運行,在編譯時eclipse就可以進行相關工作的編譯時注解。 `@Inherited` 表示這個注解可以被子類繼承 `@Documented` 表示當執行javadoc的時候,本注解會生成相關文檔 3. 注解元素,這些注解元素就用于存放注解信息,在解析的時候獲取出來 ``` String ip(); int port() default 3306; String database(); String encoding(); String loginName(); String password(); ``` ``` package annotation; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.TYPE; import java.lang.annotation.Documented; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ METHOD, TYPE }) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface JDBCConfig { String ip(); int port() default 3306; String database(); String encoding(); String loginName(); String password(); } ``` # 注解方式DBUtil 有了自定義注解@JDBCConfig之后,我們就把非注解方式DBUtil改造成為注解方式DBUtil。 如例所示,數據庫相關配置信息本來是以屬性的方式存放的,現在改為了以注解的方式,提供這些信息了。 > 注: 目前只是以注解的方式提供這些信息,但是還沒有解析,接下來進行解析 ``` package com.dodoke.util; import annotation.JDBCConfig; @JDBCConfig(ip = "127.0.0.1", database = "test", encoding = "UTF-8", loginName = "root", password = "123456") public class DBUtil2 { static { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } ``` # 解析注解 接下來就通過反射,獲取這個DBUtil這個類上的注解對象 ``` JDBCConfig config = DBUtil.class.getAnnotation(JDBCConfig.class); ``` 拿到注解對象之后,通過其方法,獲取各個注解元素的值: ``` String ip = config.ip(); int port = config.port(); String database = config.database(); String encoding = config.encoding(); String loginName = config.loginName(); String password = config.password(); ``` 后續就一樣了,根據這些配置信息得到一個數據庫連接Connection實例。 ``` package com.dodoke.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import annotation.JDBCConfig; @JDBCConfig(ip = "127.0.0.1", database = "test", encoding = "UTF-8", loginName = "root", password = "123456") public class DBUtil2 { static { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection() throws SQLException, NoSuchMethodException, SecurityException { JDBCConfig config = DBUtil2.class.getAnnotation(JDBCConfig.class); String ip = config.ip(); int port = config.port(); String database = config.database(); String encoding = config.encoding(); String loginName = config.loginName(); String password = config.password(); String url = String.format("jdbc:mysql://%s:%d/%s?characterEncoding=%s", ip, port, database, encoding); return DriverManager.getConnection(url, loginName, password); } public static void main(String[] args) throws NoSuchMethodException, SecurityException, SQLException { Connection c = getConnection(); System.out.println(c); } } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看