The JSF managed bean annotations will be deprecated in JSF 2.3. This includes @ManagedProperty as well. But, compared to other annotations, this one has got an implementation that can be used with CDI managed beans. So, in CDI managed beans we can use the new, javax.faces.annotation.ManagedProperty. Let's see an example of injecting an instance of SourceBean into TargetBean, and a property of SourceBean into TargetBean:
@Named
@RequestScoped
public class SourceBean {
private String source;
@PostConstruct
public void init(){
source = "SourceBean";
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
}
import javax.faces.annotation.ManagedProperty;
...
@Named
@RequestScoped
public class TargetBean {
@Inject @ManagedProperty("#{sourceBean}")
private SourceBean sourceBean;
@Inject @ManagedProperty("#{sourceBean.source}")
private String source;
public void targetAction(){
System.out.println("Injected bean: " + sourceBean);
System.out.println("Injected property (via injected bean): " + sourceBean.getSource());
System.out.println("Injected property: " + source);
}
}
The complete example is available here.