spring中基于xml获取bean的三种方式

文章目录


spring获取bean对象的3钟方式

bean.xml:

css 复制代码
<?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">

    <!--创建user对象
    id唯一标识
    class:类的全路径

    -->
    <bean id="user" class="com.guigu.User"></bean>
</beans>

1.根据id获取bean对象

java 复制代码
import com.guigu.User;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserTest {

    public static void main(String[] args) {
        // 获取spring配置文件bean.xml

        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");

//获取bean.xml中创建的对象
        //第一中获取方式:根据id获取bean对象
        //<bean id="user" class="com.guigu.User"></bean>

        User user = (User) context.getBean("user");


        System.out.println("根据id获取对象" + user);
        // 第二中方式:根据类型获取bean对象

        User user2 = context.getBean(User.class);

        System.out.println("根据类型获取对象" + user2);


        // 根据id和类型获取bean对象
        User user3 = context.getBean("user", User.class);
        System.out.println("根据id和类型获取对象" + user2);


    }
}

2.根据类型获取bean对象

javascript 复制代码
import com.guigu.User;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserTest {

    public static void main(String[] args) {
        // 获取spring配置文件bean.xml

        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");

//获取bean.xml中创建的对象
        //第一中获取方式:根据id获取bean对象
        //<bean id="user" class="com.guigu.User"></bean>

        User user = (User) context.getBean("user");


        System.out.println("根据id获取对象" + user);
        // 第二中方式:根据类型获取bean对象

        User user2 = context.getBean(User.class);

        System.out.println("根据类型获取对象" + user2);


        // 根据id和类型获取bean对象
        User user3 = context.getBean("user", User.class);
        System.out.println("根据id和类型获取对象" + user2);


    }
}

3.根据id和类型获取bean对象

kotlin 复制代码
import com.guigu.User;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserTest {

    public static void main(String[] args) {
        // 获取spring配置文件bean.xml

        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");

//获取bean.xml中创建的对象
        //第一中获取方式:根据id获取bean对象
        //<bean id="user" class="com.guigu.User"></bean>

        User user = (User) context.getBean("user");


        System.out.println("根据id获取对象" + user);
        // 第二中方式:根据类型获取bean对象

        User user2 = context.getBean(User.class);

        System.out.println("根据类型获取对象" + user2);


        // 根据id和类型获取bean对象
        User user3 = context.getBean("user", User.class);
        System.out.println("根据id和类型获取对象" + user2);


    }
}

@注意

根据类型获取对象时候springIoc中bean对象有且只有一个,否则异常。

bean.xml

xml 复制代码
<?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">

    <!--创建user对象
    id唯一标识
    class:类的全路径

    -->
    <bean id="user1" class="com.guigu.User"></bean>
    <bean id="user" class="com.guigu.User"></bean>
</beans>

测试:

java 复制代码
// 第二中方式:根据类型获取bean对象

        User user2 = context.getBean(User.class);

        System.out.println("根据类型获取对象" + user2);

结果:

Exception in thread "main" org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.guigu.User' available: expected single matching bean but found 2: user1,user

当bean对象class同名的情况下可以根据id、id和类型等两种方式进行获取bean对象即可,

相关推荐
小蒜学长2 分钟前
基于Spring Boot+Vue的“禾源”农产品销售系统设计与实现(代码+数据库+LW)
java·spring boot·后端·农产品销售系统·产品溯源
光年20003 分钟前
Mock-Server开箱即用的Mock服务
java·maven·mock·jetty
弹简特4 分钟前
【Java项目-企悦抽】14-活动管理模块01-创建活动的实现
java·开发语言·springboot
驭渊的小故事6 分钟前
MyBatis 入门:从 JDBC 到优雅操作数据库(一)
笔记·sql·spring
迅猛龙办公室10 分钟前
Python实现求两个数字之和
java·开发语言·python
范桂飓14 分钟前
AWS Agent Infra 架构分析
java·架构·aws
企业数字化笔记21 分钟前
视频成片怎么稳定导出?编码选择、GPU/CPU降级与媒体交付验收
java·python·ffmpeg
萧瑟余晖1 小时前
Spring IoC容器与Bean生命周期详解
spring
Wx-bishekaifayuan1 小时前
springboot房屋租赁系统11574-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·sql·spring·课程设计
三8441 小时前
Fastjson 漏洞学习笔记 · 03 · 经典利用链:TemplatesImpl 与 JdbcRowSetImpl
java·web安全·fastjson