日期:2014-05-20  浏览次数:20636 次

关于spring的IOC你了解多少?
我们大家用spring的时候,当然要有一个applicationContext.xml文件,当我把这个文件放到工程目录src下的时候,我想每回来取得这个xml文件里的bean的时候,就要这样写:
BeanFactory beanFactory = new ClassPathXmlApplicationContext("applicationContext.xml");

因为是放到src下,所以用的是ClassPathXmlApplicationContext这个方法来取得xml文件。

但是我还想知道其他的方法,大家来多多像我这样举出取得spring的xml文件的其他方法吧,越多越好,必须要有详细的说明,以及充要条件等。



还有一个问题就是,我们在applicationContext.xml里配置bean的时候,在<bean>标签里有很多属性吧,如scop,abstract等,大家谁有关于<bean>标签里属性的介绍,详细点的,粘贴出来分享下。如果自己知道的,能说明白的和说全的,也请说出来吧,然后你就做我师傅好了o(∩_∩)o...



------解决方案--------------------
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");
applicationContext.xml

------解决方案--------------------

ClassPathXmlApplicationContext类:是从当前类路径中检索配置文件并装载它来创建容器的实例。
FileSystemXmlApplicationContext类:他也是ApplicationContext接口的实现类,它和ClassPathXmlApplicationContext类的不同就在于读 取Spring配置文件的方式。它不再从类路径中获取配置文件,而是通过参数指定配置文件的位置,可以获取类路径之外的资源。具体语法格式如下:
ApplicationContext context = new FileSystemXmlApplicationContext(String configLocation);
楼主用第二种就可以不用在web/WEB-INF/classes路径下了,configLocation,就是之你上下文放置的路径!

------解决方案--------------------
BeanFactory beanFactory = new ClassPathXmlApplicationContext(); 
//如果是配置文件叫applicationContext.xml,完全可以不写
------解决方案--------------------
如果applicationContext.xml,只要放在classes下,spring的jar包自己会去读的,你只要把配置写对就行了
------解决方案--------------------
基于Spring框架的项目也做了若干,包括web项目和java项目,这里给楼主几点建议:
1.建议查一下“import”标签,通过“import”标签可以将其它配置文件注入置当前配置文件,就类似与java的import。提这个是建议楼主:将applicationContext.xml文件做成配置文件的集合,而文件集合中的每个文件都描述项目中具体的功能或组件,这样配置文件就比较清晰。
2.Spring是容器,重要的不在与实现容器,也就是实例化,而是在于使用容器。我就比较喜欢往容器中扔垃圾。
3.最后建议楼主能把Spring的源码看一下,一方面可以帮你了解如何使用Spring,另一方面可以帮你理解Spring。
------解决方案--------------------
你的applicationContext.xml放在哪里,就写对应的路径。new FileSystemResource(XXX)这里的参数取决于你的文件放在哪里。不是必须放在web-inf下的
------解决方案--------------------
探讨
引用:
BeanFactory beanFactory = new ClassPathXmlApplicationContext();
//如果是配置文件叫applicationContext.xml,完全可以不写



不写的话 不会报错么?

------解决方案--------------------
BeanFactory factory = new XmlBeanFactory(new FileSystemResource( 
"web/WEB-INF/classes/applicationContext.xml")); 


------解决方案--------------------
scope有两种取值:
1、singleton(默认值):每次调用getBean的时候返回相同的实例,在IOC容器里只创建一个实例。
2、prototype:每次调用getBean的时候返回不同的实例,在IOC容器里创建多个实例。


abstract取true或false,默认是false。
当abstract取true时说明这是个抽象bean,没有具体的现实,不用配置type具体的实现类。
可以让其他bean来继承。
------解决方案--------------------
BeanFactory : 提供DI功能
多种实现,XMLBeanFactory 是最常用
依赖 Resource , 有两种 Resource 实现最常用:
ClassPathResource 
FileSystemResource
ApplicationContext : 扩展了BeanFactory 
三种常用实现:
ClassPathXmlApplicationContext
FileSystemXmlApplicationContext
XmlWebApplicationContext
这三种实现区别于从不同的位置加载配置文件