Spring基于IOC容器基本原理

[b]一、简介[/b]
org.springframework.beans及org.springframework.context包 是Spring IoC容器
的基础。BeanFacotry提供的高级配置机制,使得管理各种对象成为可能,ApplicationContext是BeanFactory的扩展,因而BeanFactory所具备的能力和行为也适用于ApplicationContext,并且功能得到了进一步增强,比如更易 与Spring AOP集成、资源处理(国际化处理)、事件传递及各种不同应用层的context实现。
总之,BeanFactory提供了配制框架及基本功能,而 ApplicationContext 则增加了更多支持企业核心内容的功能。

[b]二、 容器和bean[/b]
在Spring中,那些组成你应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean。 简单地讲,bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象(pojo)没有什么区别了。

[b]
1、容器[/b]
BeanFactory 是Spring IoC容器的实际代表者,IoC容器负责容纳所描述的bean,并对bean进行管理。
在Spring中,BeanFactory是IoC容器的核心接口。 它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。

[b]1.1、实例化bean[/b]
bean定义描述如何创建一个或多个对象实例。容器从bean定义列表中取得一个指定的bean定义,并根据bean定义里面的配置元数据,使用反射机制来创建实际对象。bean的实例化的定义方式如下:


//用构造器来实例化
<bean id="exampleBean" class="examples.ExampleBean"/>

//使用静态工厂方法实例化
<bean id="exampleBean"
class="examples.ExampleBean2"
factory-method="createInstance"/>

//使用实例工厂方法实例化
<bean id="serviceLocator" class="com.foo.DefaultServiceLocator">
</bean>
<!-- the bean to be created via the factory bean -->
<bean id="exampleBean"
factory-bean="serviceLocator"
factory-method="createInstance"/>


[b]1.2、实例化容器[/b]
spring团队倾向于把xml配置文件拆成多个部分的做法。通过将xml配置文件的路径作为参数传给ApplicationContext构造器,生成一个ApplicationContext实例,即实例了BeanFactory,BeanFacotry从多个配置文件读取bean定义。
ApplicationContext加载xml文件写法可以这样:

//1 第一种方法,使用数组
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] {"services.xml", "daos.xml"});
//2 使用通配符
ApplicationContext contex=new ClassPathXmlApplicationContext("s*.xml");

//3 使用组合的方式
ApplicationContext contex=new ClassPathXmlApplicationContext("services.xml");
在services.xml中
<import resource="daos.xml"/> 执行resource路径为相对daos.xml的路径


其他加截xml配置文件实例化IOC容器的方法有:

//applicationContext.xml放在工程目录下,也可以写成绝对路径
Resource resource = new FileSystemResource("applicationContext.xml");
BeanFactory factory = new XmlBeanFactory(resource);

//位于src目录下
ClassPathResource resource = new ClassPathResource("applicationContext.xml");
BeanFactory factory = new XmlBeanFactory(resource);

ApplicationContext context = new FileSystemXmlApplicationContext("applicationContext.xml");
//位于src目录下
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml", "applicationContext2.xml"});
BeanFactory factory = (BeanFactory) context;


三、使用容器
BeanFactory factory = context;

获得BeanFactory容器后,接着使用getBean(String)就可以取得bean实例。

四、简单的例子(基于IOC的bean注入,将bean注入到执行类Test里)
首先创建一个对象HelloWorld(bean)
public class HelloWorld {
private String msg;

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}

}


然后修改spring配置文件applicationContext.xml,在配置文件中实例化bean
<bean id="helloBean" class="com.spring.demo.HelloWorld">
<property name="msg" value="Hello World!"/>
</bean>


再创建一个将要把bean注入进的类Test
public static void main(String[] args){
//读取配置文件,获得BeanFactory
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
BeanFactory factory = context;

HelloWorld hello = (HelloWorld)factory.getBean("helloBean");

System.out.println(hello.getMsg());
}

通过Bean上下文工具获取Bean对象并注入给Test,然后输出其中的属性.
weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python017基于Python贫困生资助管理系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值