@@ -104,6 +104,7 @@ protected void printClass() {
104104 printFields ();
105105 printConstructor ();
106106 printMethods ();
107+ printListenerHolder ();
107108 unindent ();
108109 iprint ("}%n" );
109110 }
@@ -113,7 +114,7 @@ protected void printFields() {
113114 printOriginalStatesAccessorField ();
114115 printIdGeneratorField ();
115116 printPropertyTypeFields ();
116- printListenerField ();
117+ printListenerSupplierField ();
117118 printNamingTypeField ();
118119 printImmutableField ();
119120 printCatalogNameField ();
@@ -262,14 +263,14 @@ protected void printPropertyTypeFields() {
262263 }
263264 }
264265
265- protected void printListenerField () {
266+ protected void printListenerSupplierField () {
266267 if (entityMeta .isGenericEntityListener ()) {
267- iprint ("private final %1$s<%2$s> __listener ;%n" , entityMeta
268- .getEntityListenerElement ().getQualifiedName (),
268+ iprint ("private final java.util.function.Supplier< %1$s<%2$s>> __listenerSupplier ;%n" ,
269+ entityMeta .getEntityListenerElement ().getQualifiedName (),
269270 entityMeta .getEntityTypeName ());
270271 } else {
271- iprint ("private final %1$s __listener ;%n" , entityMeta
272- .getEntityListenerElement ().getQualifiedName ());
272+ iprint ("private final java.util.function.Supplier< %1$s> __listenerSupplier ;%n" ,
273+ entityMeta .getEntityListenerElement ().getQualifiedName ());
273274 }
274275 print ("%n" );
275276 }
@@ -332,14 +333,7 @@ protected void printEntityPropertyTypeMapField() {
332333
333334 protected void printConstructor () {
334335 iprint ("private %1$s() {%n" , simpleName );
335- if (entityMeta .isGenericEntityListener ()) {
336- iprint (" __listener = new %1$s<%2$s>();%n" , entityMeta
337- .getEntityListenerElement ().getQualifiedName (),
338- entityMeta .getEntityTypeName ());
339- } else {
340- iprint (" __listener = new %1$s();%n" , entityMeta
341- .getEntityListenerElement ().getQualifiedName ());
342- }
336+ iprint (" __listenerSupplier = () -> ListenerHolder.listener;%n" );
343337 iprint (" __namingType = %1$s.%2$s;%n" , NamingType .class .getName (),
344338 entityMeta .getNamingType ().name ());
345339 iprint (" __immutable = %1$s;%n" , entityMeta .isImmutable ());
@@ -458,60 +452,72 @@ protected void printIsQuoteRequiredMethod() {
458452 }
459453
460454 protected void printPreInsertMethod () {
455+ iprint ("@SuppressWarnings({\" rawtypes\" , \" unchecked\" })%n" );
461456 iprint ("@Override%n" );
462457 iprint ("public void preInsert(%1$s entity, %2$s<%1$s> context) {%n" ,
463458 entityMeta .getEntityTypeName (),
464459 PreInsertContext .class .getName ());
460+ printDeclareListener ();
465461 iprint (" __listener.preInsert(entity, context);%n" );
466462 iprint ("}%n" );
467463 print ("%n" );
468464 }
469465
470466 protected void printPreUpdateMethod () {
467+ iprint ("@SuppressWarnings({\" rawtypes\" , \" unchecked\" })%n" );
471468 iprint ("@Override%n" );
472469 iprint ("public void preUpdate(%1$s entity, %2$s<%1$s> context) {%n" ,
473470 entityMeta .getEntityTypeName (),
474471 PreUpdateContext .class .getName ());
472+ printDeclareListener ();
475473 iprint (" __listener.preUpdate(entity, context);%n" );
476474 iprint ("}%n" );
477475 print ("%n" );
478476 }
479477
480478 protected void printPreDeleteMethod () {
479+ iprint ("@SuppressWarnings({\" rawtypes\" , \" unchecked\" })%n" );
481480 iprint ("@Override%n" );
482481 iprint ("public void preDelete(%1$s entity, %2$s<%1$s> context) {%n" ,
483482 entityMeta .getEntityTypeName (),
484483 PreDeleteContext .class .getName ());
484+ printDeclareListener ();
485485 iprint (" __listener.preDelete(entity, context);%n" );
486486 iprint ("}%n" );
487487 print ("%n" );
488488 }
489489
490490 protected void printPostInsertMethod () {
491+ iprint ("@SuppressWarnings({\" rawtypes\" , \" unchecked\" })%n" );
491492 iprint ("@Override%n" );
492493 iprint ("public void postInsert(%1$s entity, %2$s<%1$s> context) {%n" ,
493494 entityMeta .getEntityTypeName (),
494495 PostInsertContext .class .getName ());
496+ printDeclareListener ();
495497 iprint (" __listener.postInsert(entity, context);%n" );
496498 iprint ("}%n" );
497499 print ("%n" );
498500 }
499501
500502 protected void printPostUpdateMethod () {
503+ iprint ("@SuppressWarnings({\" rawtypes\" , \" unchecked\" })%n" );
501504 iprint ("@Override%n" );
502505 iprint ("public void postUpdate(%1$s entity, %2$s<%1$s> context) {%n" ,
503506 entityMeta .getEntityTypeName (),
504507 PostUpdateContext .class .getName ());
508+ printDeclareListener ();
505509 iprint (" __listener.postUpdate(entity, context);%n" );
506510 iprint ("}%n" );
507511 print ("%n" );
508512 }
509513
510514 protected void printPostDeleteMethod () {
515+ iprint ("@SuppressWarnings({\" rawtypes\" , \" unchecked\" })%n" );
511516 iprint ("@Override%n" );
512517 iprint ("public void postDelete(%1$s entity, %2$s<%1$s> context) {%n" ,
513518 entityMeta .getEntityTypeName (),
514519 PostDeleteContext .class .getName ());
520+ printDeclareListener ();
515521 iprint (" __listener.postDelete(entity, context);%n" );
516522 iprint ("}%n" );
517523 print ("%n" );
@@ -699,6 +705,27 @@ protected void printNewInstanceMethod() {
699705 print ("%n" );
700706 }
701707
708+ protected void printListenerHolder () {
709+ iprint ("private static class ListenerHolder {%n" );
710+ if (entityMeta .isGenericEntityListener ()) {
711+ iprint (" private static %1$s<%2$s> listener = new %1$s<>();%n" ,
712+ entityMeta .getEntityListenerElement ().getQualifiedName (),
713+ entityMeta .getEntityTypeName ());
714+ } else {
715+ iprint (" private static %1$s listener = new %1$s();%n" ,
716+ entityMeta .getEntityListenerElement ().getQualifiedName ());
717+ }
718+ iprint ("}%n" );
719+ print ("%n" );
720+ }
721+
722+ private void printDeclareListener () {
723+ iprint (" Class __listenerClass = %1$s.class;%n" , entityMeta
724+ .getEntityListenerElement ().getQualifiedName ());
725+ iprint (" %1$s __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);%n" ,
726+ entityMeta .getEntityListenerElement ().getQualifiedName ());
727+ }
728+
702729 protected class IdGeneratorGenerator implements
703730 IdGeneratorMetaVisitor <Void , Void > {
704731
@@ -807,4 +834,4 @@ public Void visitDomainCtType(DomainCtType domainCtType, Void p)
807834 }
808835 }
809836
810- }
837+ }
0 commit comments