类的动态加载-2

1.通过new创建对象是静态加载,如图一,假如此时Word类和Excel类并不存在,Office类是不可以通过编译的,再假如一个类中要对很多类进行实例化,都是通过New实例化的,那么,但凡有一个类出问题了,那么整个大类就不会通过编译。
2.如图二,我们使用的是动态加载类的方法,在编译此类时,并不会加载那些需要动态加载的类,所以即使那些需要实例化的类不存在,OfficeBetter类也可以进行编辑,只有在使用那些不存在类的实例时才会报错,类找不到啊。。。。

这里写图片描述
图一

这里写图片描述
图二

3.动态加载类的好处,我们以图二,三,四三个类来说,
注意,图二中我们在创建类对象时,需要强制转换类类型,此时我们怎么会知道传入的类是啥呀,即使知道是具体哪个类,我们在这里写了这个类,谁又能保证今后需求不变动呢,难道每次更改这个类,我们都要到这类改一下??不,我们有更好的方法,我们可以声明一个接口,如下,然后实现这个接口,这样的话,每当功能变动时,我们只需要新建一个类实现我们这个接口即可,也不要修改图三中类的代码,也不用重新进行编译。。。。。。。。。。很好就学过这个知识,也就是现在项目用到了,所以理解起来感觉又不一样了。

这里写图片描述
图三

这里写图片描述
图四

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Spring 中,可以使用动态加载的方式来实现在运行时动态加载和管理。下面介绍两种常见的动态加载的方式: 1. 使用 `Class.forName()` 方法加载:`Class.forName(className)` 方法可以根据的全限定名(className)动态加载。一旦加载完成,就可以使用反射来创建该的实例并进行相关操作。 示例代码如下所示: ```java String className = "com.example.MyClass"; Class<?> clazz = Class.forName(className); Object instance = clazz.newInstance(); ``` 在这个例子中,我们使用 `Class.forName()` 方法加载了名为 `com.example.MyClass` 的,并通过反射创建了该的实例。 2. 使用 `ClassLoader` 加载:`ClassLoader` 是 Java 虚拟机提供的用于加载文件的机制。Spring 中的 `ApplicationContext` 本身就是一个 `ClassLoader`,可以使用它来加载。 示例代码如下所示: ```java ApplicationContext context = ...; // 获取 ApplicationContext 对象 ClassLoader classLoader = context.getClassLoader(); String className = "com.example.MyClass"; Class<?> clazz = classLoader.loadClass(className); Object instance = clazz.newInstance(); ``` 在这个例子中,我们通过 `ApplicationContext` 获取了一个 `ClassLoader`,然后使用它来加载名为 `com.example.MyClass` 的,并通过反射创建了该的实例。 需要注意的是,动态加载需要在运行时提供正确的名,并且需要确保路径中存在该的字节码文件。另外,动态加载的方式在设计和使用时需要谨慎,确保符合项目需求和安全性要求。 希望以上信息对你有所帮助,如果你有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值