配置文件

配置文件

使用配置文件

经常修改,从源文件的编写到部署的过程,都需要重新修改.

解决方案:

把配置保存在一个文件中,
Java代码可以通过流(stream)动态的读取

真正解决的问题:

代码中的硬编码,写死到Java代码中,而且是经常改动的值

常用的配置文件

1.properties文件.

文件后缀名.properties,用来保存一些简单的数据.保存格式:key=value
重复的key表示更新操作,不能存多个用户信息

2.xml文件

文件后缀名.xml,用来保存一些复杂的数据,按照清晰的格式保存(结构化)

properties文件的基本使用

常见的操作

创建properties文件,并存储数据

1.文件存放在resource文件夹中.
2.在该配置文件中,所有数据到Java后,都是String类型
3.等号不需要空格
1
2
3
#这是注释,保存格式:key=value
username=root
password=admin

使用jdk提供好的工具类来加载和获取

void load(InputStream inStream):通过输入流把数据加载到properties对象中
String getProperty(String key):通过指定的key获取value值

使用相对路径

1
2
//默认去bin中找
Thread.currentThread().getContextClassLoader().getResourceAsStream("user.properties");

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class PropertiesTest {
@Test
public void loadProperties() throws Exception {
//创建properties对象
Properties pt = new Properties();
//获取相对路径
InputStream in = Thread.currentThread().
getContextClassLoader().
getResourceAsStream("user.properties");
//加载
pt.load(in);
//获取
String username = pt.getProperty("username");
System.out.println(username);
String password = pt.getProperty("password");
System.out.println(password);
}
}

反射的优势

反射的应用场景
更多的是使用一个全限定名来创建对象(反射)

为了解决硬编码,为了降低代码的耦合性,一般将具体的实现类配置到配置文件中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package me.cscar.con.reflect;

import org.junit.Test;

import java.io.InputStream;
import java.util.Properties;

public class Math implements IMath {
@Test
public void testMath() throws Exception {
Properties ps = new Properties();
InputStream is = Thread.
currentThread().
getContextClassLoader().
getResourceAsStream("math.properties");
ps.load(is);
//forName获取properties文件中的全限定名称,并且创建对象
IMath math = (IMath) Class.forName(ps.getProperty("clssName"))
.newInstance();
//getClass获取math的全限定名
System.out.println(math.getClass());
}
}

优点:

1.反射提高了程序的灵活性和扩展性。
2.降低耦合性,提高自适应能力。
3.它允许程序创建和控制任何类的对象,无需提前硬编码目标类。

缺点:

1.性能问题:使用发射基本上是一种在运行期间解析字节码操作,效率较低,一般程序不建议使用,对灵活性和拓展性要求较高的工具或框架上使用较多。
2.代码复杂性:反射发生在运行期,程序员无法在源代码中看到程序的逻辑,反射代码比相应的直接的代码更复杂,因而会带来维护的问题

框架中大量使用反射,用来提高框架的扩展性和灵活性