有两种不同的Bean,可以分为普通Bean与工厂Bean。
1、普通Bean
在配置文件中定义什么类型就返回什么类型。
2、工厂Bean
在配置文件中定义的类型与返回类型不同。
如何决定工厂Bean返回什么类型的Bean?
通过修改工厂Bean的getObject方法的返回类型。
public class beanFactory implements FactoryBean<Book> {
@Override
public Book getObject() throws Exception {
Book book = new Book();
book.setName("Seldom");
book.setPrice(45);
return book;
}
@Override
public Class<?> getObjectType() {
return null;
}
}
<bean id="beanFactory" class="com.cjy.factory.beanFactory">
</bean>
测试方法与结果:
public void testFactory()
{
ApplicationContext context= new ClassPathXmlApplicationContext("beanFactory.xml");
Book book= context.getBean("beanFactory", Book.class);
System.out.println(book);
}
Bean的作用域
Bean创建是默认是单例对象。可以通过scope属性设置Bean是单实例还是多实例,
scope的常见属性值:singleton(单例),prototype(多例)。
单例:
public void test()
{
ApplicationContext context =new ClassPathXmlApplicationContext("bean.xml");
Book book1= context.getBean("book1",Book.class);
Book book2= context.getBean("book1",Book.class);
System.out.println(book1);
System.out.println(book2);
}
<bean id="book1" class="com.cjy.List.Book" >
<property name="name" value="Java"> </property>
<property name="price" value="29"> </property>
</bean>
单例对象的地址相同。
多例
<bean id="book1" class="com.cjy.List.Book" scope="prototype">
<property name="name" value="Java"> </property>
<property name="price" value="29"> </property>
</bean>
可见多例的对象地址是不同的