public interface 接口名{
public Employee find()
}
<select id="find" resultType="Employee的全限定名">
select 列名 from 表名 where 条件
</select>
根据接口的class对象,创建一个实现类对象,然后通过配置文件中的方法名反射这个方法,invoke执行这个方法
需求:在配置文件中,配置类的全限定名,以及配置一个方法名,通过解析配置文件,让配置好的方法执行起来
className=包名.Person
methodName=eat
步骤:
1.创建properties配置文件,配置信息
a.问题:properties配置文件放到哪里?
将来我们开发完之后给用户的是out路径下的class文件,将class文件打包, 如果将配置文件直接放到模块下
那么out路径下是不会生成这个配置文件的,如果没有配置文件,程序也就运行不起来了
解决:我们可以将配置文件放到src下,放到src下,out路径下就会出现配置文件
b.问题:将配置文件放到src下,out路径下会自动生成配置文件,但是如果我们将来将所有的配置文件都放到src下,那么src下面会显得特别乱
解决:我们可以单独创建一个文件夹,将所有的配置文件放到此文件夹下,将此文件夹改成资源目录,取名为resources
2.读取配置文件,解析配置文件
a.问题:如果将配置文件放到resources资源目录下,我们怎么读取
new FileInputStream("模块名\\resources\\properties文件名") -> 这样不行,out路径下没有resources -> 相当于写死了
b.问题解决:用类加载器
ClassLoader classLoader = 当前类.class.getClassLoader()
InputStream in = classLoader.getResourceAsStream("文件名")//自动扫描resources下的文件->可以简单理解为扫描out路径下的配置文件
3.根据解析出来的className,创建Class对象
4.根据解析出来的methodName,获取对应的方法
5.执行方法
实现代码:
public class Demo01Reflect {
public static void main(String[] args)throws Exception {
//1.创建properties集合
Properties properties = new Properties();
//2.读取配置文件,解析配置文件
InputStream in = Demo01Reflect.class.getClassLoader().getResourceAsStream("pro.properties");
properties.load(in);
//System.out.println(properties);
//3.根据解析出来的className,创建Class对象
//4.根据解析出来的methodName,获取对应的方法
String className = properties.getProperty("className");
String methodName = properties.getProperty("methodName");
Class<?> aClass = Class.forName(className);
Object o = aClass.newInstance();
Method method = aClass.getMethod(methodName);
//5.执行方法
method.invoke(o);
}
}