最近看effective java上说考虑用静态工厂方法代替构造器,这样可以避免每次调用都创建一个新的对象。读到这个时候心里有个疑问:这样子通过静态构造方法获取到的对象是否是同一个?id自增长类型的bean通过这个方法来创建且插入到数据库后,再次通过静态构造方法获取到的id是否是一样?然后我写了测试代码来测试下:
bean方面的代码:
//静态构造方法
public static LpaCategoryBean getEntityExceptId(String categorycode,
String categoryname, String unit, boolean isenabled, String remark){
return new LpaCategoryBean( categorycode,categoryname, unit, isenabled, remark);
}
public static LpaCategoryBean getEntity(Integer categoryid,String categorycode,
String categoryname, String unit, boolean isenabled, String remark){
return new LpaCategoryBean( categoryid,categorycode,categoryname, unit, isenabled, remark);
}
在业务层调用静态构造方法且数据:
public void testStatic() {
LpaCategoryBean bean = LpaCategoryBean.getEntity(null,"test", "test", "test", true, "test");
categoryDaoImpl.save(bean);
System.out.println("bean="+bean);
LpaCategoryBean bean2 = LpaCategoryBean.getEntity(null,"test1", "test1", "test1", true, "test1");
System.out.println("bean2="+bean2);
System.out.println(bean==bean2);
System.out.println("==================");
LpaCategoryBean bean3 = LpaCategoryBean.getEntityExceptId("test", "test", "test", true, "test");
categoryDaoImpl.save(bean3);
System.out.println("bean3="+bean3);
LpaCategoryBean bean4 = LpaCategoryBean.getEntityExceptId("test1", "test1", "test1", true, null);
System.out.println("bean4="+bean4);
System.out.println(bean3==bean4);
System.out.println("==================");
categoryDaoImpl.save(bean4);
System.out.println("bean4="+bean4);
System.out.println(bean3==bean4);
}
结果:
Hibernate: insert into EP.Security.LPA_Category (CategoryCode, CategoryName, IsEnabled, Remark, Unit) values (?, ?, ?, ?, ?)
bean=LpaCategory [categoryid=48,categorycode=test,categoryname=test,unit=test,isenabled=true,remark=test]
bean2=LpaCategory [categoryid=null,categorycode=test1,categoryname=test1,unit=test1,isenabled=true,remark=test1]
false
==================
Hibernate: insert into EP.Security.LPA_Category (CategoryCode, CategoryName, IsEnabled, Remark, Unit) values (?, ?, ?, ?, ?)
bean3=LpaCategory [categoryid=49,categorycode=test,categoryname=test,unit=test,isenabled=true,remark=test]
bean4=LpaCategory [categoryid=null,categorycode=test1,categoryname=test1,unit=test1,isenabled=true,remark=null]
false
==================
Hibernate: insert into EP.Security.LPA_Category (CategoryCode, CategoryName, IsEnabled, Remark, Unit) values (?, ?, ?, ?, ?)
bean4=LpaCategory [categoryid=50,categorycode=test1,categoryname=test1,unit=test1,isenabled=true,remark=null]
false
证明:
这样子通过静态构造方法获取到的对象是应该不是同一个,id也不相同。猜测是第二次调用静态构造方法的时候会去把static里的对象清空?后面再看看