springjsfdependency-injectionintegrationmanaged-bean

Spring JSF integration: how to manage a bean and inject a Spring component/service?


I understand that a managed bean works like a controller, because your only task is "link" the View Layer with Model.

To use a bean as a managed bean I must declare @ManagedBeanannotation, doing that I can communicate JSF with bean directly.

If I want to inject some component (from Spring) in this managedBean I have two possibles ways:

  1. Choose the property in ManagedBean (like "BasicDAO dao") and declare @ManagedProperty(#{"basicDAO"}) above the property. Doing it, i'm injecting the bean "basicDAO" from Spring in ManagedBean.

  2. Declared @Controller in ManagedBean Class, then i'll have @ManagedBean and @Controller annotations, all together. And in property "BasicDAO dao" i must use @Autowired from Spring.

Is my understanding correct?


Solution

  • There is another way to use Spring-managed beans in JSF-managed beans by simply extending your JSF bean from SpringBeanAutowiringSupport and Spring will handle the dependency injection.

    @ManagedBean // JSF-managed.
    @ViewScoped // JSF-managed scope.
    public class GoodBean extends SpringBeanAutowiringSupport {
    
        @Autowired
        private SpringBeanClass springBeanName; // No setter required.
    
        // springBeanName is now available.
    }