I was looking through some JSF controllers and it was a mix of @Named and @ManagedBean annotations. These annotations provide similar dependency injection, but there are important differences.
This means @Named beans are visible to the whole JEE container, while @ManagedBean are visible only to the JSF container. The visibility issue is covered in this table
* – only if scope of injected bean is broader
One problem is that @Named requires that you use a JEE enabled container – so you have to use TomEE instead of Tomcat.
A further problem in earlier CDI versions was that there was no CDI equivalent of @ViewScoped. This has now been resolve with @javax.faces.view.ViewScope.
You also need to be very careful with mixing JSF and CDI as they use different packages – javax.faces.bean vs javax.enterprise.context.
This is a non-question as from JSF2.3 onwards @ManagedBean is being phased out and the recommended approach is @Named. It is also important not to mix CDI with JSP scopes
However there are circumstances when I would still use @ManagedBean at present –