代码结构图
- Dao层
public interface UserDao {
void fun();
}
public class UserDaoImpl implements UserDao {
@Override
public void fun() {
System.out.println("dao fun");
}
}
- Service层
public interface UserService {
void sth();
}
public class UserServiceImpl implements UserService{
private UserDao userDao = ObjectFactory. getFactory().getInstance(UserDao.class);
@Override
public void sth() {
userDao.fun();
}
}
- 工厂类
public class ObjectFactory {
private static ObjectFactory factory = new ObjectFactory();
private ObjectFactory(){
}
public static ObjectFactory getFactory(){
return factory;
}
private static Properties properties = null;
static {
properties = new Properties();
InputStream is = ObjectFactory.class.getResourceAsStream("/factory.properties");
try {
properties.load(is);
} catch (IOException e) {
e.printStackTrace();
}
}
//获取实现类的对象
public T getInstance(Class clazz){
//根据字节码获取到接口名
String interfaceName = clazz.getSimpleName();
//根据接口名,从属性文件中读取到实现类的完整名字
String implentName = properties.getProperty(interfaceName);
T instance = null;
try {
//获取实现类的字节码
Class tmp = Class.forName(implentName);
//根据字节码,利用反射技术生成对象
instance = (T)tmp.getDeclaredConstructor().newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return instance;
}
public static void main(String[] args) {
UserDao userDao = ObjectFactory.getFactory().getInstance(UserDao.class);
userDao.fun();
}
}
- 测试代码
public class DemoTest {
private UserService userService = ObjectFactory.getFactory().getInstance(UserService.class);
public static void main(String[] args) {
DemoTest obj = new DemoTest();
obj.userService.sth();
}
}