java spring例子_[Java] Spring 示例

(一)IoC/DI

功能

配置解析:将配置文件解析为BeanDefinition结构,便于BeansFactory创建对象

对象创建:BeansFactory 根据配置文件通过反射创建对象,所有类对象都在一个工厂类中创建,采用反射机制动态加载类,避免代码膨胀

对象生命周期管理:在 BeanDefinition 中配置scope(每次返回新对象还是之前创建好的)、lazy-init(用到时创建还是启动时创建)属性

组成

ApplicationContext:执行入口

ClassPathXmlApplicationContext:ApplicationContext 的实现类

BeanConfigParser:将配置文件解析为 BeanDefinition

XmlBeanConfigParser:BeanConfigParser 的实现类

BeanDefinition:类的定义,包括对象 id、classname、创建配置等

BeansFactory:根据配置文件解析得到的 BeanDefinition 创建对象

RateLimiter.java:要创建的对象

RedisCounter.java:RateLImiter 的依赖类

DiDemo:主程序

beans.xml:配置文件

0740733faffd9e9242cd287b00b6435b.png

过程

写好要创建的类 RateLimiter

在 xml 配置文件中写明要创建的类信息

在客户端传入配置文件名 beans.xml,获取 applicationContext 对象的实例 ClassPathXmlApplicationContext

在 ClassPathXmlApplicationContext 中通过 XmlBeanConfigParser 解析配置文件,获取 BeanDefinition

通过 BeansFactory ,根据 BeanDefinition 创建目标类 rateLimiter、rediscounter 对象,及两者的依赖关系

代码

ApplicationContext

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagedi;2

3 public interfaceApplicationContext {4 Object getBean(String beanId);5 }

View Code

ClassPathXmlApplicationContext

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagedi;2

3 importjava.io.IOException;4 importjava.io.InputStream;5 importjava.util.List;6

7 public class ClassPathXmlApplicationContext implementsApplicationContext{8 privateBeansFactory beansFactory;9 privateBeanConfigParser beanConfigParser;10

11 publicClassPathXmlApplicationContext(String configLocation) {12 this.beansFactory = newBeansFactory();13 this.beanConfigParser = newXmlBeanConfigParser();14 loadBeanDefinitions(configLocation);15 }16

17 private voidloadBeanDefinitions(String configLocation) {18 InputStream in = null;19 try{20 in = this.getClass().getResourceAsStream(configLocation);21 if (in == null) {22 throw new RuntimeException(("Can not find config file: " +configLocation));23 }24

25 List beanDefinitions =beanConfigParser.parse(in);26 beansFactory.addBeanDefinitions(beanDefinitions);27 } finally{28 if(in != null) {29 try{30 in.close();31 } catch(IOException e) {32 }33 }34 }35 }36

37 @Override38 publicObject getBean(String beanId) {39 returnbeansFactory.getBean(beanId);40 }41 }

View Code

BeanConfigParser

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值