Spring创建bean实例的常用方式
Spring创建bean实质是:通过一个类的全限定类型用反射去创建对象,最后放入一个Map集合中,需要使用某个bean的话可以用id类查找。
1、创建一个properties文件,列出需要创建的对象的全限定类型
userService=com.zjhc.beanByHand.UserService
bookService=com.zjhc.beanByHand.BookService
2、创建一个bean工厂类,来通过反射创建对象
public class BeanFactory {
//定义一个静态的配置文件对象
private static Properties props;
//定义一个存放对象的Map容器
private static Map<String,Object> beans;
//通过静态块给props赋值
static{
try {
//实例化props对象
props = new Properties();
//通过类加载器获取加载配置文件的流,并且将文件加到输入流
InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");
//加载bean配置文件
props.load(in);
//实例化容器
beans = new HashMap<String, Object>();
//取出配置文件种所有的key
Enumeration keys = props.keys();
while(keys.hasMoreElements()){
//取出每个key
String key = keys.nextElement().toString();
//根据key获取value
String beanPath = props.getProperty(key);
//反射创建对象
Object value = Class.forName(beanPath).newInstance();
//将创建好的对象放入容器
beans.put(key,value);
}
} catch (Exception e) {
throw new ExceptionInInitializerError("配置文件初始化创建对象异常....");
}
}
//根据bean的名称获取对象
public static Object getBean(String beanName){
return beans.get(beanName);
}
}
测试:
public class UserService {
public static void main(String[] args) {
BookService bookService = (BookService) BeanFactory.getBean("bookService");
System.out.println(bookService);
}
}
public class BookService {
public static void main(String[] args) {
UserService userService = (UserService) BeanFactory.getBean("userService");
System.out.println(userService);
}
}
结果:
com.zjhc.beanByHand.UserService@7440e464
com.zjhc.beanByHand.BookService@7440e464
一、通过反射调用构造方法创建bean对象
调用类的构造方法获取对应的bean实例,是使用最多的方式,这种方式只需要在xml的bean元素中指定class属性,spring容器内部会自动调用该类型的构造方法来创建bean对象,将其放在容器中以供使用
- 语法:
<bean id="bean名称"