Class.forName异常找不到类,但是参数是包名+类名

发布于 2022-09-11 16:43:51 字数 1346 浏览 13 评论 0

clipboard.png

public static <T>T newInstance(Class<T> interfaceClass){
            try {
                //希望我给你一个接口  你给我一个实现类  而且是随时可变的
                //目前传进来  UserDao.class
                String name = interfaceClass.getSimpleName();

                //拿着接口的名字 配置文件找图纸 找具体实现类 全限定名
                String className=findClassNameByName(name);

                //都获取具体实现类的类名
                Class<?> aClass = Class.forName(className);

                Object o = aClass.newInstance();
                return (T) o;
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }

        private static String findClassNameByName(String name) throws DocumentException {
            //创建解析对象
            SAXReader saxReader = new SAXReader();

            //给配置文件流
            InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("beans.xml");
            //返回doc对象
            Document document = saxReader.read(in);
            //使用xpath语法 解析
            Element element = (Element) document.selectSingleNode("//bean[@id='" + name + "']");

            //返回需要的元素
            return element.attributeValue("class");
        }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

染柒℉ 2022-09-18 16:43:51
  1. 确定待加载待类是否在classpath下;
  2. 如果不在你可以设置到classpath下或者通过classloader动态加载。
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文