【java_基础深入】注解注入配置 / Properties读取配置 / ResourceBundle读取配置

注解注入

/**
 * 生命周期问题:
 *  注解的默认生命周期是保留到字节码阶段
 *  通过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");

你可能感兴趣的:(java,基础)