Java通过工厂、Map容器创建对象的方法

2025-05-29 0 42

一、通过工厂+反射+配置文件创建对象

通过工厂+反射+配置文件获取对象

?

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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Java通过工厂、Map容器创建对象的方法 https://www.kuaiidc.com/108210.html

相关文章

发表评论
暂无评论