Spring中IoC的配置有两种方式,一种是XML实现方式,一种是IoC注解实现,两种方式各有利弊,接下来一一讲解。
Spring的XML配置文件的根元素是beans,每个组件使用bean元素来定义,bean元素可以有许多属性,其中有两个重要的属性:id和class。id表示组件的默认名称,class表示组件的类型。
通过Spring获取Bean对象有如下几种方式:
■不指定id,只配置必需的全路径类名即class属性,IoC容器会为其生成一个标识,客户端必须通过接口“T getBean(Class<T>requiredType)”获取Bean。
■指定id,必须在IoC容器中唯一。
■指定name,必须在IoC容器中唯一。
■同时指定id和name,id就是标识符,而name就是别名,必须在IoC容器中唯一。
新建spring-bean-ioc.xml文件,使用上面介绍的几种方式配置之前定义的product类。核心内容如下:
那么如何获取上面配置的Bean对象呢?这需要用到ApplicationContext容器。Application Context是Spring中较高级的容器,可以加载配置文件中定义的bean,构建为Bean对象,对Bean集中管理,按需分配Bean。
最常使用的ApplicationContext接口实现类有以下三种:
■FileSystemXmlApplicationContext:该容器从XML文件中加载已定义的bean。需要提供给构造器XML文件的完整路径。
■ClassPathXmlApplicationContext:该容器从CLASSPATH中的XML文件加载已定义的bean。不需要提供XML文件的完整路径,正确配置CLASSPATH环境变量即可,因为容器会从CLASSPATH中搜索bean配置文件。(www.xing528.com)
■WebXmlApplicationContext:该容器会在一个Web应用程序的范围内加载已在XML文件中定义的bean。
当获取Application Context的上下文后,就可以通过getBean()方法得到所需要的Bean。这个方法通过配置文件中的bean ID来返回一个真正的对象。
根据ApplicationContext容器获取上面配置的Bean,测试类如下:
运行结果如下:
指定id获取=com.javadevmap.bean.Product@3d921e20
指定name属性获取=com.javadevmap.bean.Product@36b4cef0
指定id和name获取=com.javadevmap.bean.Product@fad74ee
注意上面例子,如果使用注释中的ctx.getBean(Product.class)方法获取,会报告以下错误:
org.springframework.beans.factory.NoUniqueBeanDefinitionException:No qualifying bean of type [com.javadevmap.bean.Product]is defined:expected single matching bean but found 4:com.javadevmap. bean.Product#0,beanId,beanName,beanId01
通过class方法获取Bean,Spring发现有四个实例,但并不清楚用哪个,所以会报错,在5.3.9节会介绍用@Qualifier来区分各实例,这里先注释掉。
运行本例,可在控制台看到输出结果,可以发现配置的Bean对象已由ClassPathXmlApplicationContext容器管理。之后的业务操作也不需要主动创建一个实例,只需要配置bean和执行获取Bean方法即可。Bean的整个生命周期由Spring进行管理。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。