注解实例


package com.annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;
/**
*
* @author cong
* 数据库连接注解
*
*/
@Target(value = {FIELD})//Target:此注解用到的地方有TYPE、FIELD、METHOD
@Retention(value = RUNTIME)//注解的运行环境
public @interface CustomConnection {
String url() default "";
String driverClass() default "";
String username() default "";
String password() default "";
}


注解处理
package com.annotation.processor;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;

import com.annotation.CustomConnection;

@SuppressWarnings("unchecked")//不显示警告提示
public class CustomAnnotationProcessor {
public static <T> void processor(Class<T> clazz) {
try {
//T t = clazz.newInstance();
T t = null;
Field[] fields = clazz.getDeclaredFields();//获取T对象声明变量

Constructor<?>[] constructors = clazz.getDeclaredConstructors();//获取T对象的构造函数,因为构造函数的访问级别问题
for(Constructor<?> constructor : constructors) {
constructor.setAccessible(true);//无论T对象的构造函数是什么访问级别都可以访问其方法
t = (T)constructor.newInstance(new Object[]{});
}

for(Field field : fields) {
if(field.isAnnotationPresent(CustomConnection.class)) {
CustomConnection customConnection = field.getAnnotation(CustomConnection.class);
String url = customConnection.url();
String driverClass = customConnection.driverClass();
String username = customConnection.username();
String password = customConnection.password();
Class.forName(driverClass);
Connection connection = DriverManager.getConnection(url, username, password);
field.setAccessible(true);
field.set(t, connection);
continue;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}


package com.util;

import java.sql.Connection;

import com.annotation.CustomConnection;
/**
*
* @author Administrator
* 调用注解连接数据库
*
*/
public class DBUtil {

private DBUtil() {//构造方法

}

@CustomConnection(url = "jdbc:oracle:thin:@//192.168.40.29:1521/PDBMYORACLE",
driverClass = "oracle.jdbc.driver.OracleDriver",
username = "victop",
password = "victop")
private static Connection connection;

public static Connection getConnection() {
return connection;
}
}

测试


package com.victop;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.annotation.processor.CustomAnnotationProcessor;
import com.util.DBUtil;

public class Test {

public static void main(String[] args) {
try {
CustomAnnotationProcessor.processor(DBUtil.class);
Connection connection = DBUtil.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("select * from Users");
ResultSet resultSet = preparedStatement.executeQuery();
while(resultSet.next()) {
System.out.println(resultSet.getString("username"));
}
} catch (SQLException e) {
e.printStackTrace();
}
}

}

注解实例

时间: 2024-10-27 12:48:57

注解实例的相关文章

Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(三)

前两章我为大家详细介绍了如何搭建Maven环境.Spring MVC的流程结构.Spring MVC与Struts2的区别以及示例中的一些配置文件的分析.在这一章,我就对示例的层次结构进行说明,以及MyBatis的一些简单介绍. 本文不会对MyBatis作详细说明,大象还是假定阅读本文的朋友对MyBatis(ibatis)有最基本的了解,只有这样才能较好的理解本文的内容.关于MyBatis请查看它的官方文档及其它参考资料,本文不作详细讨论. 一.工程结构图      上面这是典型的Maven项目

Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(一)

Spring更新到3.0之后,其MVC框架加入了一个非常不错的东西——那就是REST.它的开放式特性,与Spring的无缝集成,以及Spring框架的优秀表现,使得现在很多公司将其作为新的系统开发框架.大象根据实际的项目经验,以之前SSH2例子为基础,对其进行一次大改造,详细的为大家讲解如何实现SSM3全注解式的开发. 这次大象将采取两种构建方式,一是很多人喜欢用的MyEclipse,另一个,则是用Eclipse+Maven.这一篇,将主要讲解开发环境设置与Maven构建方式. 1. 开发环境

Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(二)

在上一篇文章中我详细的介绍了如何搭建maven环境以及生成一个maven骨架的web项目,那么这章中我将讲述Spring MVC的流程结构,Spring MVC与Struts2的区别,以及例子中的一些配置文件的分析. 一.Spring MVC 3.0介绍 Spring MVC是一个典型的MVC框架,是Spring内置的Web框架,可以作为应用项目的展示层,继Spring 2.0对Spring MVC进行重大升级后,Spring 2.5又为Spring MVC引入了注解驱动功能,再到3.0时代,全

Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(四)

这一章大象将详细分析web层代码,以及使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能.     之前在使用Struts2实现MVC的注解时,是借助struts2-convention这个插件,如今我们使用Spring自带的spring-webmvc组件来实现同样的功能,而且比之以前更简单.另外,还省掉了整合两个框架带来的不稳定因素.     对于Spring MVC框架,我主要讲一下它的常用注解,再结合一些示例进行说明,方便大家能够快速理解.     一.Spring MV

Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(五)

这是本系列的最后一篇,主要讲一下FreeMarker模板引擎的基本概念与常用指令的使用方式.     一.FreemMarker基本概念     FreemMarker是一个用Java语言编写的模板引擎,它是一个基于模板来生成文本输出的一个工具.是除了JSP之外被使用得最多的页面模板技术之一,另一个比较有名的模板则是Velocity.     用户可以使用FreeMarker来生成所需要的内容,通常由Java提供数据模型,FreeMarker通过模板引擎渲染数据模型,这样最终得到我们想要的内容.

Java 注解实例

package com.annotation; import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.*; /** * * @author cong * 数据库连接注解 * */ @Target(val

JAVA反射与注解实例

1    JAVA反射机制 JAVA反射机制是在运行状况中,号码大全关于恣意一个类,关键词挖掘工具都能够晓得这个类的一切特点和办法:关于恣意一个目标,都能够调用它的恣意一个办法和特点:这种动态获取的信息以及动态调用目标的办法的功能称为java言语的反射机制.或许说,JAVA反射机制指的是咱们能够于运行时加载.探知.运用编译时间完全不知道的classes.换句话说,Java程序能够加载一个运行时才得知称号的class,得悉其完好结构(但不包括methods界说),并生成其目标实体.或对其field

spring 注解实例

先不说网上的那些例子了,百度到的都是一些零碎的东西.我之所以记博客,除了总结之外,很大一个原因是对网上的某些东西真的很无语. 拿注解来说,什么入门实例的东西,说是入门,却连一个基本的hello world 都没有,呵呵. 之前一直都是用xml配置,注解现在用的也多了,要好好看看. 本篇里面都是基础,代码清单都会列全. 首先是引入spring包,这里用的是maven,pom.xml加入: <dependency> <groupId>org.springframework</gr

自定义注解实例分析

自定义注解Book /* 说明 : 如果一个注解中仅有一个属性数据, 那么请将该注解属性的名称定义为 value. 好处 : 使用该注解时, 可以省略该属性的名称. */ // @Target 使用的目标位置 @Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE}) // Retention 保留 // 注意 : 反射必须将 `保留策略` 定义运行时, 没有选择. // @see java.lang.reflect.An