¿Inyección de JSF con propiedad gestionada, buen patrón?

Soy bastante nuevo en JSF y no estoy realmente "acostumbrado" a los diferentes pensamientos, así que estoy luchando por lo que (supongo) es básico.

Digamos que tengo un usuario de clase, que es un bean de sesión.

Digamos que tengo un controlador de 10000 objetos, dice Factory, que necesita poder configurar algunos de ellos como "bloqueados", en nuestro caso significa que el campo "bloqueado" ya no es nulo sino que hace referencia a un "LockedItem" objeto.

Aquí es donde no puedo hacer que funcionen las cosas: LockedItem, cuando lo creas, se supone que hace referencia al usuario que está conectado actualmente. ¿Cómo se supone que debo hacer eso?

Intenté la inyección con @managedproperty, pero es nulo en LockedItem.constructor (lo que es normal supongo), luego lo intenté en un método @PostConstruct, pero ese método nunca se llama (¿por qué? Incluso si lo hago como un bean controlado ... ¿los métodos postconstruct solo se llaman cuando el objeto es creado por el ".xhtml"? ¿O debería usar un truco de "java se", como hacer que el Usuario sea estático?

Código para aclarar por qué no se llama a @PostConstruct (el de "Asiento"):

.xhtml

<h:outputLabel id="user" value="Hello #{user.name}" />
<h:outputLabel id="car" value="you have #{car.brand}" />

Usuario

package test;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class User implements Serializable {
    private String name ;

    public User()
    {
        name = "toto"; 
        System.out.println("User constructor");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


}

Coche

package test;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;

@ManagedBean
public class Car implements Serializable {
    private String brand ;
    private Seat seat ;

    public Car()
    {
        brand = "audi" ;
        seat = new Seat();
        System.out.println("Car constructor") ;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }


}

Asiento

package test;

import java.io.Serializable;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;

@ManagedBean
public class Seat implements Serializable {
    private int nb ;
    private String userName ;

    @ManagedProperty("#{user}")
    private User user ;

    public Seat()
    {
        nb = 4 ;
        userName="na";
        System.out.println("! Seat constructor ") ;
    }

    @PostConstruct
    public void init()
    {
        System.out.println("!! Seat postconstruct : "+user.getName());
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public int getNb() {
        return nb;
    }

    public void setNb(int nb) {
        this.nb = nb;
    }
}

Gracias !

Respuestas a la pregunta(1)

Su respuesta a la pregunta