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

Reply via email to