账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    springboot普通类中如何获取session?
    38
    0

    在springboot项目中有一个消息处理类,要在其中获取到httpSession,用@Autowired获取不到。

    public class TMessageHandlerFactory implements MessageHandlerFactory {
        @Autowired
        private HttpSession session;
        
        @Override
        public void data(InputStream data) {
            int userId = (int)session.getAtrribute("key");        //这里的session为空
            ....        //插入数据
        }
    }
    

    如果用构造函数传过来也不行。

    @Component
    public class SMTPRunner implements ApplicationRunner {
        @Autowired
        private UserService userService;    //不明白为什么这个可以获取到
        @Autowired
        private HttpSession session;        //这个却不行
        
        @Override
        public void run(ApplicationArguments applicationArguments) throws Exception {
            TMessageHandlerFactory myFactory = new TMessageHandlerFactory(session);
            ....
        }
    }

    即使使用SpringBeanFacotryUtil (implements ApplicationContextAware) 也不行。

    @Component
    public class SpringBeanFactoryUtil implements ApplicationContextAware {
        
        private static ApplicationContext applicationContext;
        
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            if(SpringBeanFactoryUtil.applicationContext == null) {
                SpringBeanFactoryUtil.applicationContext = applicationContext;
            }
        }
        
        //获取applicationContext
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
        
        //通过name获取 Bean.
        public static Object getBean(String name){
            return getApplicationContext().getBean(name);
        }
        
        //通过class获取Bean.
        public static <T> T getBean(Class<T> clazz){
            return getApplicationContext().getBean(clazz);
        }
        
        //通过name,以及Clazz返回指定的Bean
        public static <T> T getBean(String name,Class<T> clazz){
            return getApplicationContext().getBean(name, clazz);
        }
    }

    这种方法只能获取到自定义的bean(UserService这种),获取不到HttpSession这种Bean。
    应该如何做呢?可以给个比较详细的代码吗?网上的资料试了都不太行。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部