我目前正在开发一个使用Struts和Hibernate构建的项目。
项目中的所有DAO类都具有以下代码
内部构造函数:
hibernateSession = HibernateUtil.currentSession();
tx=hibernateSession.beginTransaction();
所有方法的最终子句内部:
HibernateUtil.closeSession();
这实际上意味着,在我的业务代码中,我必须初始化引用变量或每次我想从数据库访问数据时创建一个匿名对象,即
如果我必须访问method1
和method2
的class A
:
A a= new A();
a.method1(); // access method 1
a = new A();
a.method2(); //access method 2
I now mostly use anonymous objects to get this done ie
new A().method1(); //access method 1
new A().method2(); //access method 2
现在我的问题是:
new A();
使用术语“匿名对象”是否正确?在Google中搜索同样的内容时,我注意到很多评论说这不是Java中的匿名对象,但也有一些文章将其解释为匿名对象。1)是的,他们有资格收集垃圾。在现代JVM中,这不会对垃圾收集器性能产生任何重大影响,因为这些对象将直接从Eden空间清除。
2)有一种更好的方法 - 依赖注入(DI,IoC),例如Spring DI。
3)不,这不是实现它的最佳方式,因为除了有很多易出错的样板代码之外,您还将为每个DAO方法调用使用不同的事务。在许多用例中,您希望在单个事务中对相同或不同的DAO组合多个方法调用。更好的选择是使用为此目的设计的框架在服务层声明性地划分事务。一个例子是Spring transaction management。
4)Java中没有官方术语(老实说,对我而言,将其命名为有意义)。在java世界中,我们简单地称之为no-arg(默认)A
的构造函数的调用。