14.基于XML管理Bean

这篇具有很好参考价值的文章主要介绍了14.基于XML管理Bean。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于XML管理Bean

配置Springframework

引入依赖

	<!-- 基于Maven依赖传递性,导入spring-context依赖即可导入当前所需所有jar包 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>5.3.1</version>
	</dependency>

创建Spring配置文件

resources目录下新建applicationContext.xml

14.基于XML管理Bean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

测试Spring

创建Hello.java

package com.atguigu.spring;

public class Hello {
    public void sayHello(){
        System.out.println("Hello,Spring");
    }
}

applicationContext.xml添加语句

	<!--
		配置Hello所对应的bean,即将Hello的对象交给Spring的IOC容器管理
		通过bean标签配置IOC容器所管理的bean
		属性:
			id:设置bean的唯一标识
			class:设置bean所对应类型的全类名
	-->
	<bean id="Hello" class="com.atguigu.spring.Hello"></bean>

新建测试类SpringTest.java

    @Test
    public void testHello(){
        //获取对应配置文件中的IOC容器
        ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取IOC容器中的Bean
        Hello hello = (Hello) ioc.getBean("Hello");
        hello.sayHello();
    }

实现过程

14.基于XML管理Bean

注意事项

Spring 底层默认通过反射技术调用组件类的无参构造器来创建组件对象,这一点需要注意。如果在需要无参构造器时,没有无参构造器,则会抛出下面的异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘Hello’ defined in class path resource [applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.atguigu.spring.Hello]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.atguigu.spring.Hello.()

获取Bean的三种方式

14.基于XML管理Bean

根据id获取

由于 id 属性指定了 bean 的唯一标识,所以根据 bean 标签的 id 属性可以精确获取到一个组件对象,但是根据 id 属性获取到的对象需要进行强转才能使用

        Hello hello = (Hello) ioc.getBean("Hello");

根据类型进行获取

由于大多数情况下唯一的 id 对应唯一的类型,所以可以直接根据类型查找,且方法会自动匹配类型,不需要进行强转

        Hello hello1 = ioc.getBean(Hello.class);

当根据类型获取bean时,要求IOC容器中指定类型的bean有且只能有一个,当IOC容器中一共配置了两个时,IOC容器无法确定唯一的一个时,会报错

    <bean id="Hello" class="com.atguigu.spring.Hello"></bean>
    <bean id="Hello1" class="com.atguigu.spring.Hello"></bean>
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.atguigu.spring.Hello' available: expected single matching bean but found 2: Hello,Hello1

当一个都没有配置到IOC容器时,会报错

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.atguigu.spring.Hello' available

根据id和类型进行获取

        Hello hello2 = ioc.getBean("Hello",Hello.class);

获取实现接口的Bean

创建接口HelloInterface.javaHello.java实现

public interface HelloInterface {
    void sayHello();
}

则可以通过多态来获取实现接口的bean–>向上转型

        //ioc.getBean(Hello.class)的写法相当于指定"id"为"Hello"("Hello"需先挂载在<bean>标签)
		HelloInterface hello = ioc.getBean(HelloInterface.class);//查找实现HelloInterface的类

如果一个接口有多个实现类,这些实现类都配置了 bean,则需要通过getBean方法内的名称或者根据id和类型获取唯一的bean

原理

根据类型来获取bean时,在满足bean唯一性的前提下,其实只是看:『对象 instanceof 指定的类型』的返回结果,只要返回的是true就可以认定为和类型匹配,能够获取到文章来源地址https://www.toymoban.com/news/detail-493819.html

到了这里,关于14.基于XML管理Bean的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring系列二:基于XML配置bean

    上文中, 我们学习到了 Spring系列一:spring的安装与使用 接下来我们学习, 通过XML配置bean Bean管理包括两方面: 创建bean对象, 给bean注入属性 案例: 通过spring的ioc容器, 获取一个bean对象, 获取方式: 按类型. 演示通过bean的类型获取对象 细节 按照类型获取bean, 要求ioc容器中的同一个

    2024年02月14日
    浏览(38)
  • 基于Xml方式Bean的配置-Bean的依赖注入以及·自动装配

    Bean的依赖注入方式 注入方式 配置方式 通过Bean的set方法注入 通过构造Bean的方法进行注入 其中,ref是reference的缩写形式,翻译为:涉及,参考的意思,用于引用其它Bean的id,value用于指定属性值 注入数据类型 普通数据类型:String、int、boolean,通过value属性指定 引用数据类型

    2024年02月07日
    浏览(55)
  • Spring6学习技术|IoC+基于xml管理bean

    尚硅谷Spring零基础入门到进阶,一套搞定spring6全套视频教程(源码级讲解) 控制反转。是一种设计思想。 通过id,通过class,和双重方式。 普通属性:String, Interger (set和构造器:感觉还是set比较方便) 特殊属性:null,特殊的大于小于等(xml转义字符,cdata) 对象:外部

    2024年02月21日
    浏览(51)
  • 基于Xml方式Bean的配置-初始化方法和销毁方法

    Bean的初始化和销毁方法配置 Bean在被实例化后,可以执行指定的初始化方法完成一些初始化的操作,Bean在销毁之前也可以执行指定的销毁方法完成一些操作,初始化方法名称和销毁方法名称通过 指定的方法名于自己创建的方法名一致即可 测试类 运行结果如下 我们还可以通

    2024年02月07日
    浏览(52)
  • 73.是否可以把我们所需的Bean都放入Spring­mvc子容器里面来管理(springmvc的spring-servlet.xml中配置全局扫描)?

    可以 , 因为父容器的体现无非是为了获取子容器不包含的bean, 如果全部包含在子容器完全用不到父容器了, 所以是可以全部放在springmvc子容器来管理的。 虽然可以这么做不过一般应该是不推荐这么去做的,一般人也不会这么干的。如果你的项目里有用到事物、或者aop记得也

    2024年02月21日
    浏览(47)
  • mybatis添加分页配置时报错 No bean named ‘org.springframework...ConfigurationClassPostProcessor.importRegistry

    场景:在mybatis 添加分页配置时报错 现象:No bean named ‘org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry 原因:版本问题 正确版本: com.baomidou mybatis-plus-boot-starter 3.4.0 错误版本: com.baomidou mybatis-plus-boot-starter 3.5.3.1 附MybatisPlusConfig 配置文件: package com.examp

    2024年02月13日
    浏览(28)
  • spring(1):基于XML获取Bean对象以及各种依赖注入方式

    1.1 根据id获取 1.2 根据类型获取 1.3 根据id和类型获取 注意: 当根据类型获取bean时,要求IOC容器中指定类型的bean有且只能有一个。 例如以下XML文件,当IOC容器中一共配置了两个,根据类型获取时会抛出异常。 根据类型来获取bean时,在满足bean唯一性的前提下,其实只是看:

    2024年01月25日
    浏览(47)
  • Spring注解驱动开发之常用注解案例_告别在XML中配置Bean

    注解驱动开发就是不再使用Spring的bean.xml文件,改为纯使用注解的方式开发 @Configuration 此注解为配置类注解,相当于spring.xml文件,即配置类==配置文件 @Bean 给容器中注册一个Bean;类型为返回值的类型,id默认是用方法名作为id 示例 Person类(后续注解配置类中都会以此类举例),

    2024年01月21日
    浏览(51)
  • Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)

    开篇: 欢迎来到 Spring 5 学习系列!在这个系列中,我们将深入研究 Spring 框架的最新版本,揭示其在现代Java开发中的精髓。无论你是初学者还是有经验的开发者,本系列都旨在为你提供深刻的理解和实用的知识,让你在构建强大、可维护和高效的应用程序方面更上一层楼。

    2024年01月22日
    浏览(78)
  • org.springframework.context.ApplicationContextException: Failed to start bean ‘org.springframework.a

    使用RabbitMq测试交换机、队列时候报的错 一开始我以为是队列的监听器配置信息和监听器代码写错了,反复查看并没有错误。 然后继续往下看报错,有这俩报错,瞬间顿悟。 ACCESS_REFUSED 这么大个字,看了好几遍居然没想到这方面的错误,大概是配置密码的时候copy错了 hotel

    2024年02月15日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包