混淆使用JSF2 + Spring + EJB3或它们的任意组合让我感到有些困惑.我知道Spring的一个主要特性是依赖注入,但是我可以使用JSF托管bean @ManagedBean和@ManagedPropertyanotations,并获得依赖注入功能.使用EJB3,我更加困惑何时将其与JSF一起使用,或者甚至有理由使用它.
那么,在什么样的情况下使用Spring + JSF2或EJB3 + JSF2是个好主意?
到目前为止,我只使用JSF2创建了一些小型Web应用程序,从不需要使用Spring或EJB3.但是,我在许多地方看到人们正在将所有这些东西放在一起.
我在说这里的基本用法:
@Stateless
public class BookServiceBean implements BookService {
@PersistenceContext EntityManager em;
public void create(Book book) { this.em.persist(book);}
}
Run Code Online (Sandbox Code Playgroud)
谷歌上面的问题,StackOverflow说是的,但没有 - 接受的答案是肯定的,但后续的是否定的; Spring.io说是和不,而且似乎是Java EE专家的Adam Bien给出了一个不合格的是.
我对一个简单的预定bean的经验表明答案是否定的:
@Stateless
public class TimerTick implements TimerTickAbs, Runnable {
@PersistenceContext private EntityManager entityManager;
@Override
public void run() {
Query q = entityManager.createQuery("SELECT blah...");
}
@Override
public Runnable runner() {
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
抽象界面:
@Local
public interface TimerTickAbs {
public Runnable runner();
}
Run Code Online (Sandbox Code Playgroud)
开始于:
@Resource ManagedScheduledExecutorService managedExecutorService;
@EJB TimerTick myRunner;
public …Run Code Online (Sandbox Code Playgroud)