我在一次采访中得到一个问题,只创建任何bean的n(固定数量)实例。如果尝试在运行时创建多于n个实例,则抛出任何异常或打印消息。提前谢谢
答案 0 :(得分:2)
通过提供自定义bean工厂,可以轻松控制bean的对象创建。您可以在其中配置限制,如固定数量的对象创建。
Example代码。
答案 1 :(得分:1)
您只需要管理创建的实例数量,您可以使用列表和非标准构造函数在同一个bean中执行此操作,但我将使用工厂模式:
发送此 bean
class BeanTest {
String name;
protected BeanTest(String name) {
this.name = name;
}
@Override
public String toString() {
return this.name;
}
}
您可以像这样创建一个Factory
(在相同的包中!)
class BeanFactory {
private static final int LIMIT = 5;
private static List<BeanTest> list = new ArrayList<BeanTest>();
public static synchronized BeanTest getInstance(String name) {
if (list.size() < LIMIT) {
BeanTest beanTest = new BeanTest(name);
list.add(beanTest);
return beanTest;
}
System.out.println("Not giving instance");
return null;
}
}
测试:
public static void main(String[] args) {
BeanTest a1 = BeanFactory.getInstance("a1");
System.out.println(a1);
BeanTest a2 = BeanFactory.getInstance("a2");
System.out.println(a2);
BeanTest a3 = BeanFactory.getInstance("a3");
System.out.println(a3);
BeanTest a4 = BeanFactory.getInstance("a4");
System.out.println(a4);
BeanTest a5 = BeanFactory.getInstance("a5");
System.out.println(a5);
BeanTest a6 = BeanFactory.getInstance("a6");
System.out.println(a6);
}
输出:
a1
a2
a3
a4
a5
Not giving instance
null
注意:
getInstance
方法添加到BeanTest
类本身,并使instead
的构造函数为protected
您还可以制作方法destroyInstance
或removeInstance
,以便更加动态Factory
:
public static synchronized boolean removeInstance(BeanTest toRemove) {
if (list.contains(toRemove)) {
return list.remove(toRemove);
}
return false;
}