java - JdbcOperationsSessionRepository.jdbcSession 不可见

标签 java spring html spring-mvc spring-session

我的程序正在使用Spring Session基于 xml 的配置,我使用 JdbcOperationsSessionRepository来实现我的 session 。 JdbcOperationsSessionRepository库正在使用 JdbcOperationsSessionRepository.JdbcSession ,如何设置 session 属性?

package sessioncontrol.page;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.session.Session;
import org.springframework.session.jdbc.JdbcOperationsSessionRepository;
import org.springframework.session.jdbc.JdbcOperationsSessionRepository.JdbcSession;
import org.springframework.session.jdbc.config.annotation.web.http.EnableJdbcHttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import lombok.extern.log4j.Log4j2;

@Log4j2
@Controller
@EnableJdbcHttpSession
public class SessionControl {
    @Autowired
    JdbcTemplate jdbcTemplate;

    @Autowired
    PlatformTransactionManager transactionManager;

    private JdbcOperationsSessionRepository repository;

    @RequestMapping(value="flpage", method=RequestMethod.GET)
    public String showPage(Model model) {
        repository = new JdbcOperationsSessionRepository(jdbcTemplate, transactionManager);
        repository.setTableName("test.spring_session");
        repository.setDefaultMaxInactiveInterval(120);
        JdbcSession session = repository.createSession();
        session.setAttribute("ATTR_USER", "rwinch");
        repository.save(session);

        return "flpage";
    }
}

它显示 import org.springframework.session.jdbc.JdbcOperationsSessionRepository.JdbcSession;不可见 那么我如何正确使用内部类设置属性方法?我真的被困在这里了。

提前致谢,如有任何评论,我们将不胜感激。

最佳答案

首先,您应该使用接口(interface)( SessionRepositoryFindByIndexNameSessionRepository )与存储库交互,并注入(inject)由 Spring Session 配置创建并在应用程序上下文中注册为 bean 的实例,而不是实例化JdbcOperationsSessionRepository你自己。

基本上有两种方法可以注入(inject) FindByIndexNameSessionRepository实例 - 要么注入(inject)并使用原始类型,要么参数化(尊重 FindByIndexNameSessionRepository<S extends Session> 的原始契约(Contract))。

原始类型方法:

class RawConsumer {

    @Autowired
    private FindByIndexNameSessionRepository sessionRepository;

    void consume() {
        Session session = (Session) this.sessionRepository.createSession();
        session.setAttribute("test", UUID.randomUUID().toString());
        this.sessionRepository.save(session);
    }

}

参数化类型方法:

class ParameterizedConsumer<S extends Session> {

    @Autowired
    private FindByIndexNameSessionRepository<S> sessionRepository;

    void consume() {
        S session = this.sessionRepository.createSession();
        session.setAttribute("test", UUID.randomUUID().toString());
        this.sessionRepository.save(session);
    }

}

关于java - JdbcOperationsSessionRepository.jdbcSession 不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48425549/

相关文章:

java - 如何初始化具有特定类型的列表数组?

java - 当您拆箱对象时,对象数据类型存储在哪里以便编译器可以执行转换?

Java 泛型 : Infering the type from another method?

html - 在带有溢出的 div 中在 x 轴上滚动

php - 如何修复 inlcude_once 在 Dreamweaver 中将 php 显示为仅输出错误?

Java - 检查部分对象相等性

java - 表 "users"上的更新或删除违反了表 "fk_owner_id"上的外键约束 "movie_list"

java - spring容器是否为属于同一通用类但使用不同类型的对象创建新的bean?

mysql - 如何处理应用程序级别的 "Value ' 0000-00-0 0' can not be represented as java.sql.Timestamp"错误?

html - 边缘 40/15 不透明度/可见性过渡事件传播(闪烁)错误?