[cdi-dev] Adding Lambdas as CDI beans

Romain Manni-Bucau rmannibucau at gmail.com
Sat Oct 17 09:36:41 EDT 2015


Side note: lambda are serializable technically
Le 17 oct. 2015 15:04, "John D. Ament" <john.d.ament at gmail.com> a écrit :

> Sven,
>
> I'm a little curious, why do they need to avoid serializable contexts?  In
> all honesty, I use app scoped functions, predicates in my code, at least in
> a couple of places.  Lambdas are specifically meant for operations, not
> data, so they should be in a highly reusable scope (in my opinion at least).
>
> On the flip side, I have a hard time justifying needing to provide
> injectable beans for lambdas since good encapsulation should indicate
> they're only used in a single spot.
>
> John
>
> On Sat, Oct 17, 2015 at 7:51 AM Sven Linstaedt <sven.linstaedt at gmail.com>
> wrote:
>
>> Just one question: Who is on charge and is able of managing this
>> unmanaged instances, e.g. lifecycle, serialization, concurrency (e.g. when
>> dealing with closures)?
>>
>> Functional programming and DI seem to be somehow disjunct in this case.
>> E.g. manually setting up observers seem to better fit extension than normal
>> application code.
>>
>> On the other side, specifying producer methods or fields, that are
>> injectable and return lambda expressions seems to be a no brainier for CDI,
>> is not it? As long as they are not scoped in a serializable context.
>>
>> Have a nice weekend
>> Sven
>>
>> -- sent by phone
>>
>> Am 17.10.2015 um 11:06 schrieb David Blevins <david.blevins at gmail.com>:
>>
>> In brainstorming mode about fun that could be made possible with Java 8
>> and Java EE.
>>
>> Question in my mind is: is there some way we could make it possible for
>> Lambdas or Method Refs to be CDI beans?
>>
>> It goes against the grain obviously as CDI creation is very much a “Don’t
>> call us, we’ll call you” kind of thing.  The VM dynamically creates a
>> wrapper object around the Lambda or method reference and it implements the
>> given interface.
>>
>> To make it work, there would need to be some non-producer method way of
>> saying “put this thing in the context with these qualifiers”.
>>
>> Imagine a method somewhere that would allow you to:
>>
>>    public <T> void addObserver(java.util.function.Consumer<T> observer,
>> Annotation... qualifiers);
>>
>>
>> Then you could take advantage as follows:
>>
>>    final List<URI> uris = new ArrayList<>();
>>    // @Observes URI
>>    addObserver((Consumer<URI>) uris::add);
>>
>>    // @Observes Thread
>>    addObserver(Runtime.getRuntime()::addShutdownHook);
>>
>>    // @Observes Runnable
>>    addObserver((Consumer<Runnable>)
>> Executors.newFixedThreadPool(3)::submit);
>>
>>    // @Observes URI
>>    addObserver((Consumer<URI>) System.out::println, new
>> AnnotationLiteral<Fine>() {
>>    });
>>
>>    // @Observes Handler
>>    final Logger logger = Logger.getLogger("somewhere");
>>    addObserver(logger::addHandler); // add handlers via event
>>
>>    // @Observes @Fine String
>>    addObserver((Consumer<String>) logger::fine, new
>> AnnotationLiteral<Fine>() {});
>>    }
>>
>>
>>
>> -David
>>
>>
>>
>> --
>> David Blevins
>> http://twitter.com/dblevins
>> http://www.tomitribe.com
>>
>> _______________________________________________
>> cdi-dev mailing list
>> cdi-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/cdi-dev
>>
>> Note that for all code provided on this list, the provider licenses the
>> code under the Apache License, Version 2 (
>> http://www.apache.org/licenses/LICENSE-2.0.html). For all other ideas
>> provided on this list, the provider waives all patent and other
>> intellectual property rights inherent in such information.
>>
>> _______________________________________________
>> cdi-dev mailing list
>> cdi-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/cdi-dev
>>
>> Note that for all code provided on this list, the provider licenses the
>> code under the Apache License, Version 2 (
>> http://www.apache.org/licenses/LICENSE-2.0.html). For all other ideas
>> provided on this list, the provider waives all patent and other
>> intellectual property rights inherent in such information.
>
>
> _______________________________________________
> cdi-dev mailing list
> cdi-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/cdi-dev
>
> Note that for all code provided on this list, the provider licenses the
> code under the Apache License, Version 2 (
> http://www.apache.org/licenses/LICENSE-2.0.html). For all other ideas
> provided on this list, the provider waives all patent and other
> intellectual property rights inherent in such information.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/cdi-dev/attachments/20151017/c490443d/attachment.html 


More information about the cdi-dev mailing list