You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Feb 26, 2023. It is now read-only.
Repository navigation
This repository was archived by the owner on Feb 26, 2023. It is now read-only.
Bean with @RootContext Activity in a singleton #674
When a bean with a field @RootContext Activity activity is injected in another bean with the singleton scope, the field is null, because by design singleton doesn't store ref to activities, in order to avoid memory leaks.
Having an activity field null leads to hard to find bugs, especially for AA beginners.
I think AA should prevent such case, by throwing an exception like IllegalStateException. If the user want to inject the activity in @RootContext, there must be a good reason for that, and so we must warn him he can't do that if the bean is injected in a signleton bean.
MySingletonBean takes the Activity and stored the ApplicationContext from it
MyBean takes the ApplicationContext and doesn't inject the context because we want an Activity
Dunno what we should do for this. Throwing an exception will be a pain in the ass if the developer needs to do this. Moreover, it'll break the API, as we just not setting the field right now.
@DayS Yes it is exactly the situation you described. I'm not sure if it's really tricky, that just happened to me multiple times (or maybe a I have strange way to use AA!)
What I really dislike in this issue is the fact that an annotated field is not injected silently. But you're right it'll break the API to throw an exception. But I don't have a better solution for now...
Activity
DayS commentedon Jul 25, 2013
Ho. That one was tricky :)
Just to clarify this point, let's assume we have the following classes :
As the context stored in a singleton bean is always the application context, and the
@RootContextchecks if the instance of context matches the field type before injecting it, we have the following situation :ActivityActivityand stored theApplicationContextfrom itApplicationContextand doesn't inject the context because we want anActivityDunno what we should do for this. Throwing an exception will be a pain in the ass if the developer needs to do this. Moreover, it'll break the API, as we just not setting the field right now.
tbruyelle commentedon Jul 25, 2013
@DayS Yes it is exactly the situation you described. I'm not sure if it's really tricky, that just happened to me multiple times (or maybe a I have strange way to use AA!)
What I really dislike in this issue is the fact that an annotated field is not injected silently. But you're right it'll break the API to throw an exception. But I don't have a better solution for now...
yDelouis commentedon Jul 25, 2013
We could just add a log explaining why the
Activityhas not been injected.DayS commentedon Jul 25, 2013
The log might be the best solution.
DayS commentedon Sep 23, 2013
This was merged. I'm closing this issue then