一、通过工厂+反射+配置文件创建对象
通过工厂+反射+配置文件获取对象
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
/**
* @Author: Promsing
* @Date: 2021/3/7 - 10:09
* @Description: 通过使用工厂+配置文件+反射实现创建对象
* @version: 1.0
*/
public class AbsFactory {
//声明一个变量(多例模式,每次通过工厂都会创建一个不同的实例)
private static Object obj;
public static Object createType(String createName){
//自动释放资源--使用绝对路径
try ( InputStream is = new FileInputStream( "src\\\\Factory.properties" )) {
//配置文件类
Properties pro= new Properties();
pro.load(is);
// System.out.println(pro.size());
//获取参数
String property = pro.getProperty(createName);
obj = Class.forName(property).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
return obj;
}
}
}
|
配置文件如下
?
1
2
3
|
//以Key,Value的形式,主要Value要写全类名,不要加分号
accountService=com.dynamic.service.Impl.AccountServiceImpl
accountDao=com.dynamic.dao.Impl.AccountDaoImpl
|
二、通过Map容器间接获取对象
通过Map容器间接获取对象,与Spring中的IOC容器类似,采用立即加载策略
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
/**
* @Author: Promsing
* @Date: 2021/3/19 - 11:50
* @Description: 模仿IOC容器,将创建的对象放在Map集合中,加载该类时会读取配置文件中,将类放入Map中
* @version: 1.0
*/
public class BeanFactory {
//定义一个properties对象
private static Properties props;
//定义一个Map,用于存放我们创建的对象(单例,当类加载之后就有了对象,之后从Map中获取)
private static Map<String,Object> beans;
//容器
static {
try {
props= new Properties();
//将bean.properties放在了resources路径下
InputStream is=BeanFactory. class .getClassLoader().getResourceAsStream( "bean.properties" );
props.load(is);
//实例化容器
beans= new HashMap<String,Object>();
//从配置文件中获取所有key值
Enumeration<Object> keys = props.keys();
while (keys.hasMoreElements()){
//取出每一个key
String key = keys.nextElement().toString();
//根据key获取value
String path = props.getProperty(key);
Object value=Class.forName(path).newInstance();
//放入容器中
beans.put(key,value);
}
} catch (Exception e){
e.printStackTrace();
}
}
//提供一个访问Map容器的入口
public static Object getInstance(String name){
return beans.get(name);
}
}
|
配置文件内容如下
?
1
2
|
accountService=com.dynamic.service.Impl.AccountServiceImpl
accountDao=com.dynamic.dao.Impl.AccountDaoImpl
|
以上两部分归到根上都是通过反射创建对象,JDK8在反射创建对象时,做了很大的增强,提高了性能。其实Spring IOC与以上实现创建对象的原理是一致的,Spring IOC做的就是这件事情,只是它封装的更好而已(当然还有其他的增强,O(∩_∩)O哈哈~)。
到此这篇关于Java通过工厂、Map容器创建对象的方法的文章就介绍到这了,更多相关java创建对象内容请搜索快网idc以前的文章或继续浏览下面的相关文章希望大家以后多多支持快网idc!
原文链接:https://blog.csdn.net/promsing/article/details/115277168
相关文章
猜你喜欢
- ASP.NET自助建站系统中如何实现多语言支持? 2025-06-10
- 64M VPS建站:如何选择最适合的网站建设平台? 2025-06-10
- ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
- ASP.NET自助建站系统的数据库备份与恢复操作指南 2025-06-10
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
Linux下进程管理工具Supervisor的安装配置和基本使用
2025-05-27 54 -
2025-06-04 55
-
2025-05-25 22
-
2025-05-25 35
-
2025-05-29 98
热门评论