IOC Bean管理 - FactoryBean(工厂Bean)
IOC中的Bean类型
- 普通Bean:只能返回标签定义的类型
例如:
标签路径为User类,那么调用就会返回一个User对象
- 工厂Bean(FactoryBean):定义的Bean类型可以返回其他不同的类型
FactoryBean
先实现一个普通Bean:
类:
package com.xjy.spring.factoryBean;
public class factoryBean {
}
创建Bean标签
<bean id="factory" class="com.xjy.spring.factoryBean.factoryBean"></bean>
TestDemo:
public class TestDemo {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("SpringConfig.xml");
factoryBean bean =
context.getBean("factory",factoryBean.class);
System.out.println(bean);
}
}
输出:
普通Bean只能返回Bean标签定义的类型
FactoryBean实现
要实现工厂Bean,首先要实现一个工厂Bean接口“FactoryBean”
修改类
package com.xjy.spring.factoryBean;
import org.springframework.beans.factory.FactoryBean;
public class factoryBean implements FactoryBean {
@Override
public Object getObject() throws Exception {
return null;
}
@Override
public Class<?> getObjectType() {
return null;
}
@Override
public boolean isSingleton() {
return FactoryBean.super.isSingleton();
}
}
继承后需要实现三个方法:
- getObject():决定Bean的返回值
- getObjectType():创建的Bean类型
- isSingleton():是否为单例
类实现
主要在getObject上修改:
在这里使得返回类型为先前编写过的User类
User:
public class User { private String name; public void setName(String name) { this.name = name; } public void Start(){ System.out.println("User Class Start!"); } }
getObject()
@Override
public User getObject() throws Exception {
User user = new User();
user.setName("TOM");
return user;
}
TestDeomo
public class TestDemo {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("SpringConfig.xml");
User user =
context.getBean("factory",User.class);
System.out.println(user);
}
}
输出:
通过FactoryBean得到了一个User类型对象