Appearance
获取spring bean
- 获取方式
- 根据id获取
context.getBean("xxxid")
- 根据类型获取
context.getBean(Xxx.class)
- 根据id获取
默认情况下获取两次,是否相等(单例)
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