用反射创建对象
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* @author blue
*
*properties配置文件 name=value
*StudentService :接口 定义方法 查询所有学生
*StudentServiceImpl1:定义类 表示mysql数据库中查询数据
*StudentServiceImpl2:实现类 表示oracle数据库中查询数据
*BeanFactory:创建对象
*读取properties配置文件 根据配置中的key找到value根据value反射创建对下并返回
*测试类:BeanFactory 获取需要的对象
* @date 2020年8月13日
*/
public class StuTest {
public static void main(String[] args) {
//获取反射出的对象
StudentService studentService=(StudentService)BeanFactory.getBean("StudentService");
studentService.findAllStudent();
}
}
反射工厂
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class BeanFactory {
static Properties pro;
//静态代码块 提前
static {
try {
//实例化属性集对象
pro=new Properties();
//将配置文件内容读取到流中
InputStream is =Thread.currentThread().getContextClassLoader().getResourceAsStream("bean.properties");
//加载
pro.load(is);
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public static Object getBean(String name) {
Object obj=null;
try {
// 获取 class 反射
Class<?> c=Class.forName(pro.getProperty(name));
//反射调用构造器创建对象
obj=c.getConstructor().newInstance();
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return obj;
}
}
import java.util.List;
public interface StudentService {
//查询所有学生
List<Student> findAllStudent();
}
import java.util.List;
public class StudentServiceImplMysql implements StudentService{
@Override
public List<Student> findAllStudent() {
System.out.println("在Mysql数据库中查询所有学生信息。。。。。");
return null;
}
}
根据配置文件中的限定名不同所实现的方法也不同
public class StudentServiceImplOracal implements StudentService {
@Override
public List<Student> findAllStudent() {
System.out.println("在oracal数据库中查询所有学生信息。。。。。");
return null;
}
}
学生类
。
public class Student {
private String name;
private int age;
public String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Student(String name, int age, String address) {
super();
this.name = name;
this.age = age;
this.address = address;
}
public Student() {
super();
// TODO 自动生成的构造函数存根
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", address=" + address + "]";
}
}