首页 理论教育 Java服务端研发知识图谱:IoC配置使用

Java服务端研发知识图谱:IoC配置使用

时间:2023-11-22 理论教育 版权反馈
【摘要】:Spring中IoC的配置有两种方式,一种是XML实现方式,一种是IoC注解实现,两种方式各有利弊,接下来一一讲解。Spring的XML配置文件的根元素是beans,每个组件使用bean元素来定义,bean元素可以有许多属性,其中有两个重要的属性:id和class。id表示组件的默认名称,class表示组件的类型。■指定id,必须在IoC容器中唯一。Application Context是Spring中较高级的容器,可以加载配置文件中定义的bean,构建为Bean对象,对Bean集中管理,按需分配Bean。

Java服务端研发知识图谱:IoC配置使用

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进行管理。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈