在MVC加载时,框架中是否有任何特定于Spring的方式来执行初始化?当应用程序第一次加载时,spring是否有办法加载事物?在全球范围内
说我需要根据配置文件创建全局对象,是否有一个地方可以做到这一点,或者我只是创建自己的servlet并在oninit中执行此操作?
在MVC加载时,框架中是否有任何特定于Spring的方式来执行初始化?当应用程序第一次加载时,spring是否有办法加载事物?在全球范围内
说我需要根据配置文件创建全局对象,是否有一个地方可以做到这一点,或者我只是创建自己的servlet并在oninit中执行此操作?
那么标准@PostConstruct
呢?
@Service
class AnySpringBean {
@PostConstruct
public void init() {
//run when bean is created
}
}
适用于@Controller
s。
更新:更全球地方将继承ContextLoaderListener
),并覆盖contextInitialized()
和web.xml
使用它(见user1076371answer)。我不太喜欢这种方法,但至少初始化并不与任何Spring bean绑定。
我正在寻找一个更加全球化的地方,并非特定于控制器,而是整个应用程序。 – codecompleting
@codecompleting:请参阅我的更新 –
或者我可以手动执行此操作,然后在弹簧外部使用过滤器右键?有可能在我的控制器之前发生的事情?在应用程序启动? – codecompleting
最好的事情是将它留给春天。将您的全局对象bean(可能是单例等)添加到您的应用程序上下文中。确保在通过将ContextLoaderListener添加到web.xml加载应用程序时初始化Spring。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4">
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
您可以从应用程序中任何位置的WebApplicationContext访问您的全局对象。
你的建议和克里斯一样吗? – codecompleting
这是不同的但更简单的国际海事组织。你不需要在你现有的类中实现任何接口。让我们假设你想在一个名为SocketMonitor的类中调用一个名为initializeSocketDaemon的方法,你可以像这样添加一个bean
有一个ApplicationListener接口可以实现挂钩到启动完成事件。在我知道Spring完成启动后,我在我的应用程序中使用它来做事情。我有几个不同的类,我想在系统启动后启动后台线程,并且每个类都实现了这个接口来完成他们特定的启动后任务。
它是在应用程序整体完成后发送的,但它是每个侦听的spring bean都获取一个事件,因此您可以将其挂钩到某个现有bean或创建类似PostStartupBean的东西,该存储只用于实现此目的一种方法。
public void onApplicationEvent(ApplicationEvent applicationEvent)
{
if (applicationEvent instanceof ContextRefreshedEvent)
{
..do stuff here..
}
}
前三个答案都是很好的,并提供该参考本章的不同方面,应首先阅读:http://static.springsource.org/spring/docs/current/spring-framework-reference/html/ beans.html#beans-factory-lifecycle –