前言
这里主要介绍通过xml配置文件完成spring的配置,以及获取bean对象的几种方式。
一、介绍
spring从容器中获取bean的方式主要有
- 根据id
- 根据类型
- 根据id和类型
根据类型获取bean应该确保容器中为单例bean,如果有多个同类型bean存在会报错
<!-- 没有scope配置默认是单例-->
<bean id="user" class="org.example.po.User" scope="singleton"></bean>
<bean id="user" class="org.example.po.User" scope="prototype"></bean>
二、代码部分
1. 根据id获取bean
<bean id="user" class="org.example.po.User"></bean>
User user1= (User) context.getBean("user");
System.out.println("1.根据id获取bean:"+user1);
2.根据类型获取bean
<bean id="user" class="org.example.po.User"></bean>
User user2= context.getBean(User.class);
System.out.println("2.根据类型获取bean:"+user2);
3.根据id和类型获取bean
<bean id="user" class="org.example.po.User"></bean>
User user3= context.getBean("user",User.class);
System.out.println("3.根据id获取bean:"+user3);
4.根据类型,获取接口实现类
package org.example.dao;
public interface UserDao {
public void add();
}
package org.example.dao.impl;
import org.example.dao.UserDao;
public class UserDaoImpl implements UserDao {
@Override
public void add() {
System.out.println("UserDaoImpl...add");
}
}
<bean id="userDaoImpl" class="org.example.dao.impl.UserDaoImpl"></bean>
UserDao userDao= context.getBean(UserDao.class);
System.out.println("4.根据类型获取接口实现类:"+userDao);
userDao.add();
5. FactoryBean
package org.example.factory;
import org.example.po.User;
import org.springframework.beans.factory.FactoryBean;
public class MyFactoryBean implements FactoryBean<User> {
@Override
public User getObject() throws Exception {
return new User();
}
@Override
public Class<?> getObjectType() {
return User.class;
}
}
<!--FactoryBean-->
<bean id="myFactoryBean" class="org.example.factory.MyFactoryBean"></bean>
User user = context.getBean("myFactoryBean", User.class);
System.out.println("5.根据FactoryBean获取bean:"+user);
FactoryBean实际上返回的就是User类型的对象