Skip to content

获取spring bean

  • 获取方式
    • 根据id获取 context.getBean("xxxid")
    • 根据类型获取 context.getBean(Xxx.class)

默认情况下获取两次,是否相等(单例)

java
        Object user = context.getBean("user");
        logger.info(user.toString());
        Object user2 = context.getBean(User.class);
        logger.info(user2.toString());
        //判断两个对象是否是同一个,是,说明默认单例
        logger.info((user2 == user)+"");

在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">
    <!--
    使用bean标签,完成user对象的创建
    id:唯一标识
    class:对象所在类的全路径
    -->
    <bean id="user" class="com.wyizd.iocxml.User"> </bean>
    <bean id="user1" class="com.wyizd.iocxml.User"> </bean>
</beans>
java
        ApplicationContext context= new ClassPathXmlApplicationContext("bean.xml");
        //根据id获取bean
        Object user = context.getBean("user");
        logger.info(user.toString());
        Object user1 = context.getBean("user1");
        logger.info(user1.toString());
        //判断两个对象是否是同一个,是,说明默认单例
        logger.info((user1 == user)+"");

答案是不相等

  • 这个时候根据类型获取bean,如果发现有两个类型相同的,会报NoUniqueBeanDefinitionException错误

是否可以通过获取接口类得到实现类的对象,可以

创建接口

java
package com.wyizd.iocxml;

public interface UserDao {
    void run();
}

创建实现类

java
package com.wyizd.iocxml;

public class UserDaoImpl implements UserDao {
    @Override
    public void run() {
        System.out.println("run in impl");
    }
}

配置bean<bean class="com.wyizd.iocxml.UserDaoImpl" />

测试:

java
public class Main {
    private static final Logger logger = LoggerFactory.getLogger(Main.class);
    public static void main(String[] args) {
        ApplicationContext context= new ClassPathXmlApplicationContext("bean.xml");
        UserDao userDao = context.getBean(UserDao.class);
        userDao.run();
    }
}

输出run in impl