《Spring框架IOC容器笔记---动力节点》

本文详细介绍了Spring框架的IOC容器,包括如何创建第一个Spring项目,深入解析getBean()源码,分析在创建ApplicationContext容器时bean对象的创建过程。讨论了非联网环境下约束文件的配置,Bean的装配,不同作用域的bean,以及基于XML和注解的依赖注入(DI)。还涵盖了Spring配置文件的组织方式,以及如何使用JUnit4进行Spring测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在这里插入图片描述
在这里插入图片描述

第一个Spring项目

  步骤:
  1、新建java project
  2、导入必备的jar
    1>spring的核心:spring-beans.jar,spring-core.jar,spring-context.jar,spring-expression.jar
    2>日志:commons-logging.jar
  可选的有日志实现:log4j.jar 单元测试:junit.jar
                    在这里插入图片描述
  3、定义接口和实现类,与没有使用框架一样定义
在这里插入图片描述
  4、定义spring的配置文件
    1>加入约束文件spring-beans.xsd
    2>声明bean对象,即java对象
试想,如何让Spring知道你声明了SomeServiceImpl类,然后去创建对象呢?不管IOC是DL或者是DI方式实现,配置文件都是必不可少的。一般都是用applicationContext.xml命名,applicationContext.xml的配置参考xsd-config.html
        在这里插入图片描述
拷贝这一段到applicationContext.xml
在这里插入图片描述
  5、定义测试类,在代码中使用spring,需要创建接口ApplicationContext,表示spring框架。
在这里插入图片描述
   < bean id = “someService” class=“com.bjpowernode.service.SomeServiceImpl” > < /bean>的作用就相当于
SomeService someService = new com.bjpowernode.service.SomeServiceImpl();
  main函数获取bean对象测试:注意此时我的applicationContext.xml放在src下的根目录,所以直接使用ClassPathXmlApplicationContext创建ApplicationContext。若applicationContext.xml放在某个磁盘目录,则用FileSystemXmlApplicationContext创建。
在这里插入图片描述
若applicationContext.xml直接放在项目的根目录下,即和src是同级,需要使用FileSystemXmlApplicationContext读取配置文件
在这里插入图片描述

getBean()源码分析

右键getBean open Implementation,跑到AbstractBeanFactory中查看源码,
在这里插入图片描述
  查看getBean
在这里插入图片描述
  可以发现bean是getObjectForBeanInstance获得然后返回的
在这里插入图片描述
  getObjectForBeanInstance中调用了getObjectFromFactoryBean,而getObjectFromFactoryBean中object是从FactoryBeanRegistrySupport中的factoryBeanObjectCache中get得到的。
在这里插入图片描述
而果然,factoryBeanObjectCache是一个Map,并且是一个ConcurrentHashMap。
在这里插入图片描述
关键结论:我们从容器中获取一个bean对象用applicationContext的对象的getBean(“bean的id名”)方法实现,获取bean对象是BeanFactory类通过工厂模式实现,所有的bean对象其实都放在一个ConcurrentHashMap中,getBean其实就是从这个Map中getObject,这也就是为什么applicationContext.xml中的bean id名必须唯一的原因

在创建ApplicationContext容器时会创建所有配置文件中的 bean对象

  在SomeServiceImpl中添加无参构造函数。
        在这里插入图片描述
  测试ApplicationContext容器创建时,bean对象已经创建了。
在这里插入图片描述
并且是一个bean标签会创建一个对象,例如新增一个bean标签
在这里插入图片描述
再次运行,你会发现无参构造器被执行了两次,说明创建了两个对象。
在这里插入图片描述
同时,可以获取容器关于bean对象的信息
在这里插入图片描述

非联网下的约束文件的配置

  spring的约束文件用于作为数据标签属性的验证。联网情况下会自动下载xsd约束文件。
在这里插入图片描述
  本地中在:spring-framework-4.0.0.RELEASE\schema\beans中
在这里插入图片描述
复制http://www.springframework.org/schema/beans/spring-beans.xsd ,然后到windows–perference–xml catalog中添加,并指定本地的xsd
在这里插入图片描述
此时你打一个<就会有提示:
                    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值