相关疑难解决方法(0)

ContextLoaderListener在Spring中的角色/目的?

我正在学习在我的项目中使用的Spring Framework.我在web.xml文件中找到了 ContextLoaderListener条目.但无法弄清楚它对开发人员有何帮助?

ContextLoaderListener的官方文档中,它说它是启动WebApplicationContext.关于WebApplicationContext JavaDocs说:

用于为Web应用程序提供配置的界面.


但我无法理解我在ContextLoaderListener中实现了什么,它在内部初始化WebApplicationContext

根据我的理解,ContextLoaderListener 读取Spring配置文件(使用web.xml中的contextConfigLocation给出的值),解析它并加载该配置文件中定义的单例bean.类似地,当我们想要加载原型bean时,我们将使用相同的webapplication上下文来加载它.因此,我们使用ContextLoaderListener初始化web应用程序,以便我们提前读取/解析/验证配置文件,每当我们想要注入依赖项时,我们都可以毫不拖延地直接执行它.这种理解是否正确?

java spring web-applications

161
推荐指数
5
解决办法
13万
查看次数

@Transactional @PostConstruct方法

我想在我的应用程序的开头读取文本数据夹具(CSV文件)并将其放入我的数据库中.

为此,我使用初始化方法(@PostConstruct注释)创建了一个PopulationService.

我也希望它们在一个事务中执行,因此我在同一个方法上添加了@Transactional.

但是,似乎忽略了@Transactional:在我的低级DAO方法中启动/停止事务.

我需要手动管理交易吗?

spring transactions

41
推荐指数
4
解决办法
2万
查看次数

如何在spring加载应用程序上下文后执行作业?

我想在加载Spring上下文后运行一些工作,但我不知道如何做到这一点.
你知道怎么做吗?

java spring

30
推荐指数
5
解决办法
3万
查看次数

我可以确保我的一个Spring ApplicationListener最后执行吗?

我有几个服务正在侦听Spring事件以更改我的基础数据模型.这些都通过实施来完成ApplicationListener<Foo>.一旦所有Foo侦听器修改了底层数据模型,我的用户界面就需要刷新以反映更改(想想fireTableDataChanged()).

有没有办法确保特定的听众Foo始终是最后的?或者有没有办法在所有其他听众完成后调用函数?我正在使用基于注释的布线和Java配置,如果这很重要的话.

java spring dependency-injection event-handling

18
推荐指数
1
解决办法
4745
查看次数

我似乎无法实现Spring的Lifecycle工作

在加载Spring的应用程序上下文后,我需要立即发生一些事情.据我了解,我需要创建一个Lifecycle实现并在上下文中放置一个bean引用.所以我在上下文中有类似的东西:

<bean id="mySpringLifecycle" class="com.my.project.MySpringLifecycle" />
Run Code Online (Sandbox Code Playgroud)

该类看起来像这样:

public class MySpringLifecycle implements Lifecycle {

    @Override
    public void start() {
        System.out.println("The lifecycle has started.");
    }

    @Override
    public void stop() {
        return;
    }

    @Override
    public boolean isRunning() {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

我没有错误,但MySpringLifecycle从未打印出"生命周期已经开始.",我的应用程序启动就好了.

编辑:

这是固定代码:

public class MySpringLifecycle implements SmartLifecycle {

    private volatile boolean isRunning = false;

    @Override
    public boolean isAutoStartup() {
        return true;
    }

    @Override
    public void stop(Runnable r) {
        System.out.println("STOPPED RUNNABLE!!!");
        isRunning = false;
    }

    @Override
    public void start() {
        System.out.println("STARTED!!!");
        isRunning …
Run Code Online (Sandbox Code Playgroud)

spring spring-mvc

13
推荐指数
1
解决办法
7710
查看次数