版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
注解注入
/**
* 生命周期问题:
* 注解的默认生命周期是保留到字节码阶段
* 通过Retention元注解指定注解的生命周期
* 1. SOURCE 保留到源码阶段
* 2. CLASS 保留到字节码阶段
* 3. RUNTIME 保留到运行时
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface JdbcInfo {
String username() default "root"; // 设置默认配置,可以覆盖
String password();
String url();
String driverClassName() default "com.mysql.jdbc.Driver";
}
@JdbcInfo(password = "root", url = "jdbc:mysql:///practice")
public class JDBCUtil {
private static String url;
private static String user;
private static String password;
private static String driverClassName;
static {
//1.获取当前类上的名为JDBCInfo的注解对象
Class clazz = JDBCUtil.class;
JdbcInfo jdbcInfo = (JdbcInfo) clazz.getAnnotation(JdbcInfo.class);
//获取注解对象的各个属性值, 可以后续使用DriverManager获取数据库连接
user = jdbcInfo.username();
password = jdbcInfo.password();
url = jdbcInfo.url();
driverClassName = jdbcInfo.driverClassName();
//注册驱动
try {
Class.forName(driverClassName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Properties读取配置
private static DataSource dataSource;
static {
//通过工厂类创建Druid连接池
Properties properties = new Properties();
// 拿到类加载器的目录就是src目录,druidconfig.properties应该处于src目录下
// 当存在resources目录,该目录下也成为classpath,druidconfig.properties也可以处于该目录下
InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("druidconfig.properties");
try {
properties.load(is);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
// 从properties文件获取Druid数据库连接池
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
ResourceBundle读取配置
// 文件名是beans.properties, 注意参数只填入"beans"
ResourceBundle bundle = ResourceBundle.getBundle("beans");
String className = bundle.getString("className");