当FacesServlet启动时,我需要运行一些代码,但是由于FacesServlet被声明为最终的,所以我不能扩展它并覆盖init()方法。
特别是,我希望在hibernate删除并创建数据模型之后,在开发和测试期间将一些数据写入数据库。
有没有办法配置Faces来运行一些方法,例如在faces-config.xml中?或者最好是创建一个执行初始化的单例bean?
发布于 2012-11-14 20:17:49
使用eagerly initialized application scoped managed bean。
@ManagedBean(eager=true)
@ApplicationScoped
public class App {
@PostConstruct
public void startup() {
// ...
}
@PreDestroy
public void shutdown() {
// ...
}
}(类和方法的名称实际上并不重要,你可以自由选择,这都是关于注释的)
这可以保证在FacesServlet启动后构造,因此FacesContext将在必要时可用。这与另一个答案所建议的ServletContextListener相反。
发布于 2012-11-14 19:53:10
您可以实现自己的ServletContextListener,在web应用程序启动时收到通知。因为它是一个托管的容器,你可以注入资源,做任何你想做的事情。另一种选择是使用@Startup创建一个@Singleton ejb,并在它的@PostCreate方法中完成工作。通常情况下,ServletContextListener运行良好,但是,如果ear中有多个web应用程序,并且它们都共享相同的持久化上下文,则可以考虑使用@Singleton bean。
发布于 2012-11-14 19:57:04
嘿,你可能想在这里使用一些方面。只需将其设置为运行之前
void init(ServletConfig servletConfig)
//Acquire the factory instances we will //这来自here
也许this会帮你。
https://stackoverflow.com/questions/13378221
复制相似问题