转载:https://www.cnblogs.com/hljmly/articles/5442778.html
spring加载bean的方法
用spring的时候,需要一个applicationContext.xml文件,放到工程目录src下,每次我想获得这个xml文件里的bean的时候,就要这样写: BeanFactory beanFactory = new ClassPathXmlApplicationContext("applicationContext.xml");
因为是放到src下,所以用的是ClassPathXmlApplicationContext这个方法来取得xml文件。但是还有没有别的方法呢?在网上搜索到一些:
Tips1:
BeanFactory factory = new XmlBeanFactory(new FileSystemResource("web/WEB-INF/classes/applicationContext.xml")); // 从文件系统中的xml文件载入上下文信息 ApplicationContext fx = new FileSystemXmlApplicationContext("web/WEB-INF/classes/applicationContext.xml"); // 从类路径中的xml文件载入上下文信息 ApplicationContext cx = new ClassPathXmlApplicationContext("applicationContext.xml");
Tips2:
//完全可以不写,只要放在classes下,spring的jar包自己会去读
//如果参数为空,则使用默认的applicationContext.xml,如果找不到,抛出异常
//如果参数不为空,以您的实参来确定 BEAN 文件的XML 位置
BeanFactory beanFactory = new ClassPathXmlApplicationContext();
Tips3:
在给工程添加spring特征库的时候就可以把它放到指定的路径下。在工程的src下建一个config包,然后添加spring特征库,添加的时候把applicationContext.xml放到定义好的包里就好了,spring会自动配置好路径,到时候直接用就行了
BeanFactory:提供DI功能多种实现,XMLBeanFactory 是最常用的,依赖 Resource , 有两种 Resource 实现最常用:ClassPathResource ,FileSystemResource
ApplicationContext : 扩展了BeanFactory三种常用实现:
ClassPathXmlApplicationContext:是从当前类路径中检索配置文件并装载它来创建容器的实例;
FileSystemXmlApplicationContext,他也是ApplicationContext接口的实现类,它和ClassPathXmlApplicationContext类的不同就在于读 取Spring配置文件的方式。它不再从类路径中获取配置文件,而是通过参数指定配置文件的位置,可以获取类路径之外的资源。具体语法格式: ApplicationContext context = new FileSystemXmlApplicationContext(String configLocation)(configLocation,就是之你上下文放置的路径);
XmlWebApplicationContext:从web.xml中加载
scope有两种取值:
1、singleton(默认值):每次调用getBean的时候返回相同的实例,在IOC容器里只创建一个实例。
2、prototype:每次调用getBean的时候返回不同的实例,在IOC容器里创建多个实例。
abstract取值,默认是false。
当abstract取true时说明这是个抽象bean,没有具体的现实,不用配置type具体的实现类。可以让其他bean来继承。
一些建议:
1.建议查一下“import”标签,通过“import”标签可以将其它配置文件注入置当前配置文件,就类似与java的import。提这个是建议:将applicationContext.xml文件做成配置文件的集合,而文件集合中的每个文件都描述项目中具体的功能或组件,这样配置文件就比较清晰。
2.Spring是容器,重要的不在于实现容器(实例化),而是在于使用容器。
3.最后建议能看一下Spring的源码,一方面可以帮助了解如何使用Spring,另一方面可以帮助深入理解Spring。