Can't you just use field.getType() to get the field's type? -Archie
On Tue, Jul 8, 2014 at 10:35 AM, Eric B <ebenza...@gmail.com> wrote: > Thanks Andy, > > That's what I was thinking as well. However, one thing that I haven't > been able to find is how to get the type of obj that needs to be > instantiated. > Currently, it is a Validity object. However, if I wanted to do this more > generically, I would want to do something like: > > value = thisJoinPoint.getSignature().fieldType.newInstance() > > However, I can't seem to find any way to get "fieldType". > > Is that information not accessible anywhere? If not, is there a way to > get the expected return type of the get() pointcut? > > Tx, > > Eric > > > On Tue, Jul 8, 2014 at 5:26 AM, Andy Clement <andrew.clem...@gmail.com> > wrote: > >> I only had a couple of mins to play but if you went with around advice >> you could make the reflection only run if initialization is required: >> >> Object *around*(): embeddedGetter() { >> >> Object value = *proceed*(); >> >> *if* (value == *null*) { >> >> String fieldName = *thisJoinPoint*.getSignature().getName(); >> >> Object obj = *thisJoinPoint*.getThis(); >> >> *try*{ >> >> Field field = obj.getClass().getDeclaredField(fieldName); >> >> field.setAccessible(*true*); >> >> field.set(obj, value = *new* Validity() ); >> >> } >> >> *catch*( IllegalAccessException | NoSuchFieldException >> e){e.printStackTrace();} >> >> } >> >> *return* value; >> >> } >> >> >> Andy >> >> >> On 8 July 2014 04:34, Eric B <ebenza...@gmail.com> wrote: >> >>> I've got the following issue that I am trying to solve with AspectJ. >>> >>> Given an entity class with a null @Embedded field, when trying to access >>> it with a getter, instantiate it first if it is null. >>> >>> For example: >>> >>> @Entity >>> public class MyClass { >>> >>> @Id >>> private long id; >>> >>> @Embedded >>> private Validity validity; >>> } >>> >>> >>> And Validity: >>> >>> @Embeddable >>> public class Validity{ >>> private long from; >>> private long to; >>> } >>> >>> I'm having trouble figuring out how to best write the before() advice >>> however. Ideally, I'm trying to avoid using reflection for fear of slowing >>> things down, but so far, the best I have been able to come up with is the >>> following: >>> >>> // define a pointcut for any getter method of a field with @Embedded of >>> type Validity with any name in com.ia.domain package >>> pointcut embeddedGetter() : get( @javax.persistence.Embedded >>> com.ia.domain.Validity com.ia.domain..* ); >>> before() : embeddedGetter(){ >>> String fieldName = thisJoinPoint.getSignature().getName(); >>> Object obj = thisJoinPoint.getThis(); >>> // check to see if the obj has the field already defined or is null >>> try{ >>> Field field = obj.getClass().getDeclaredField(fieldName); >>> field.setAccessible(true); >>> if( field.get(obj) == null ) >>> field.set(obj, new com.ia.domain.Validity() ); >>> } >>> catch( IllegalAccessException | NoSuchFieldException e){} >>> } >>> >>> >>> Is there a better way? >>> >>> Thanks, >>> >>> Eric >>> >>> >>> >>> >>> _______________________________________________ >>> aspectj-users mailing list >>> aspectj-users@eclipse.org >>> To change your delivery options, retrieve your password, or unsubscribe >>> from this list, visit >>> https://dev.eclipse.org/mailman/listinfo/aspectj-users >>> >> >> >> _______________________________________________ >> aspectj-users mailing list >> aspectj-users@eclipse.org >> To change your delivery options, retrieve your password, or unsubscribe >> from this list, visit >> https://dev.eclipse.org/mailman/listinfo/aspectj-users >> > > > _______________________________________________ > aspectj-users mailing list > aspectj-users@eclipse.org > To change your delivery options, retrieve your password, or unsubscribe > from this list, visit > https://dev.eclipse.org/mailman/listinfo/aspectj-users > -- Archie L. Cobbs
_______________________________________________ aspectj-users mailing list aspectj-users@eclipse.org To change your delivery options, retrieve your password, or unsubscribe from this list, visit https://dev.eclipse.org/mailman/listinfo/aspectj-users