Java Annotation이 무엇인지 알고 싶다면? 먼저 "http://www.infoq.com/articles/Annotation-Hammer"를 살펴보세요.
제가 만든 데모는 다음과 같습니다.
프로젝트 구조:
가동 효과:
================================================= ==
코드 부분:
참고: 많은 사람들이 "이 작업을 수행하는 목적이 무엇입니까? 구성 파일(xml, 속성 등)을 만들 수 있는데 이보다 더 편리하지는 않습니다..."라는 질문을 고려할 것입니다.
구성 정보를 프로그램에 직접 기록합니다... 이렇게 하면 우리가 작성한 주석이 구문 분석되지 않습니다.."
그런데 xml, 속성 등의 주석과 구성 파일의 장점과 단점은 무엇일까요?
개인적인 의견: 주석을 작성할 때 더 편리합니다. 개발 효율성을 높일 수 있습니다. Hibernate, Struts, Spring 등과 같은 Annotation 프레임워크가 유용합니다.
"이 작업을 수행하는 목적은 무엇입니까?"라는 원래 주제로 돌아가서---이것은 주석이 무엇인지 모두에게 알리기 위한 데모일 뿐입니다.... 우리가 개발하는 많은 프로젝트에서
그 과정에서 우리가 정의한 주석은 거의 사용되지 않습니다. 실제로 사용된다면 이 블로그가 도움이 될 것입니다..^_^
================================================= ==
/java_annotation/src/com/b510/hongten/annotation/JDBCAnnotation.java
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 주석
*
* @author 홍텐
* @날짜 2013-4-10
*/
@문서화됨
@Retention(RetentionPolicy.RUNTIME)
@Target(요소 유형.TYPE)
공개 @인터페이스 JDBCAnnotation {
문자열 드라이버() 기본값 "com.mysql.jdbc.Driver";
문자열 dbName() 기본값 "";
문자열 인코딩() 기본값 "UTF-8";
문자열 포트() 기본값 "3306";
문자열 호스트() 기본값 "localhost";
문자열 userName() 기본 "루트";
문자열 비밀번호() 기본값 "";
}
import com.b510.hongten.annotation.JDBCAnnotation;
/**
* @author 홍텐
* @날짜 2013-4-12
*/
@JDBCAnnotation(dbName = "db_lucene", 포트 = "3306", 호스트 = "192.168.0.119", userName = "root", 비밀번호 = "root")
공개 클래스 JDBCUtil {
개인 정적 문자열 드라이버;
개인 정적 문자열 dbName;
개인 정적 문자열 인코딩;
개인 정적 문자열 포트;
개인 정적 문자열 호스트;
개인 정적 문자열 비밀번호;
개인 정적 문자열 사용자 이름;
개인 정적 문자열 URL;
public void checkInterceptor(Class<?> cl)는 예외를 발생시킵니다.
부울 플래그 = cl.isAnnotationPresent(JDBCAnnotation.class);
if (플래그) {
JDBCAnnotation jdbcAnnotation = cl.getAnnotation(JDBCAnnotation.class);
드라이버 = jdbcAnnotation.driver();
dbName = jdbcAnnotation.dbName();
인코딩 = jdbcAnnotation.encoding();
포트 = jdbcAnnotation.port();
호스트 = jdbcAnnotation.host();
userName = jdbcAnnotation.userName();
passwrod = jdbcAnnotation.password();
url = "jdbc:mysql://" + 호스트 + ":" + 포트 + "/" + dbName + "?characterEncoding=" + 인코딩;
System.out.println("JDBCUtil 로딩 주석이 완료되었습니다...");
}
}
공개 JDBCUtil() {
노력하다 {
checkInterceptor(JDBCUtil.class);
} 잡기(예외 e) {
e.printStackTrace();
}
}
공개 정적 문자열 getDriver() {
반납 운전자;
}
공개 정적 무효 setDriver(문자열 드라이버) {
JDBCUtil.driver = 드라이버;
}
공개 정적 문자열 getDbName() {
db이름을 반환합니다.
}
공개 정적 무효 setDbName(String dbName) {
JDBCUtil.dbName = DB이름;
}
공개 정적 문자열 getEncoding() {
인코딩 반환;
}
공개 정적 무효 setEncoding(문자열 인코딩) {
JDBCUtil.encoding = 인코딩;
}
공개 정적 문자열 getPort() {
반환 포트;
}
공개 정적 무효 setPort(문자열 포트) {
JDBCUtil.port = 포트;
}
공개 정적 문자열 getHost() {
반환 호스트;
}
공개 정적 무효 setHost(문자열 호스트) {
JDBCUtil.host = 호스트;
}
공개 정적 문자열 getPasswrod() {
비밀번호 반환;
}
공개 정적 무효 setPasswrod(문자열 비밀번호) {
JDBCUtil.passwrod = 비밀번호;
}
공개 정적 문자열 getUserName() {
사용자 이름을 반환합니다.
}
공개 정적 무효 setUserName(문자열 userName) {
JDBCUtil.userName = 사용자이름;
}
공개 정적 문자열 getUrl() {
반환 URL;
}
공개 정적 무효 setUrl(문자열 URL) {
JDBCUtil.url = URL;
}
}
import java.sql.Connection;
java.sql.DriverManager 가져오기;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
*
* @author 홍텐</br>
* @날짜 2012-7-16
*
*/
공개 클래스 JDBCTest {
@SuppressWarnings("정적 액세스")
공개 정적 무효 메인(String[] args) {
JDBCUtil jdbcUtil = 새로운 JDBCUtil();
String sql = "mymail에서 * 선택";
노력하다 {
Class.forName(jdbcUtil.getDriver());
연결 연결 = DriverManager.getConnection(jdbcUtil.getUrl(), jdbcUtil.getUserName(), jdbcUtil.getPasswrod());
ReadyStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
동안(rs.next()) {
System.out.println("id : " + rs.getInt(1) + " name : " + rs.getString(2) + " mail : " + rs.getString(3));
}
//레코드셋을 닫는다
if (rs != null) {
노력하다 {
rs.close();
} 잡기(SQLException e) {
e.printStackTrace();
}
}
//문 닫기
if (ps != null) {
노력하다 {
ps.close();
} 잡기(SQLException e) {
e.printStackTrace();
}
}
// 링크 객체를 닫습니다.
if (콘 != null) {
노력하다 {
conn.close();
} 잡기(SQLException e) {
e.printStackTrace();
}
}
} 잡기(예외 e) {
e.printStackTrace();
}
}
}