我曾参与过grails而且很少参加spring mvc。
通常在我们的Web应用程序中,我们需要在应用程序启动或启动时执行一些操作,例如创建管理员用户和角色(如果尚未创建)或加载一些初始数据。
Grails通过具有init()和destroy()方法的BootStrap.grrovy文件提供了此功能。
如何在Spring Web应用程序中实现此功能?
请帮忙
答案 0 :(得分:2)
如果使用@PostConstruct
注释其中一个spring bean的方法,则会在创建应用程序上下文后调用此方法,例如
class MySpringBean {
@PostConstruct
private void init() {
// initialization code goes here
}
}
答案 1 :(得分:2)
@PostConstruct执行任务,但对我来说这不是一个完美的解决方案。
解决问题的另一种方法是处理ContextRefreshedEvent。
初始化或刷新ApplicationContext时引发的事件。
以下是代码:
package a.b.c;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
@Component
public class BootStrap implements ApplicationListener<ContextRefreshedEvent>
{
@Override
public void onApplicationEvent(ContextRefreshedEvent event)
{
System.out.println("event object when context refreshed:"+event);
ApplicationContext applicationContext = event.getApplicationContext();
if( applicationContext.getParent()==null)
{
System.out.println("event object for rootApplicationContext object : "+event);
bootApplicationData();
}
}
private void bootApplicationData()
{
//operations you want to perform at loading time
}
}
输出:
event object when context refreshed:org.springframework.context.event.ContextRefreshedEvent[source=Root WebApplicationContext: startup date [Wed Sep 17 23:42:04 IST 2014]; root of context hierarchy]
event object for rootApplicationContext object : org.springframework.context.event.ContextRefreshedEvent[source=Root WebApplicationContext: startup date [Wed Sep 17 23:42:04 IST 2014]; root of context hierarchy]
INFO: Initializing Spring FrameworkServlet 'dispatcherServlet'
event object when context refreshed:org.springframework.context.event.ContextRefreshedEvent[source=WebApplicationContext for namespace 'dispatcherServlet-servlet': startup date [Wed Sep 17 23:42:13 IST 2014]; parent: Root WebApplicationContext]
答案 2 :(得分:0)
ContextLoaderListener,实现此接口,并在加载上下文后调用它。