Spring将Listener添加为组件而不是构造函数

时间:2016-09-15 08:59:15

标签: java spring servlet-3.0

我的SessionListener组件如下所示:

@Component
public class SessionListener implements HttpSessionListener{

    @Autowired
    private PeerConnectionRepository peerConnectionRepository;

    ...
}

因为我使用@Autowired我必须加载SessionListener作为组件。我试着这样做:

public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Autowired
    SessionListener sessionListener;

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        super.onStartup(servletContext);
        servletContext.addListener(sessionListener);
    }

   ...
}

但是我无法启动组件错误。如何将此SessionListener作为组件添加到servletContext?请求帮助,干杯。

2 个答案:

答案 0 :(得分:0)

我认为你正在创建同一个bean的两个实例,因为你可能有某个组件扫描(我有同样的问题并意识到@IBAction func datePick(sender: UITextField) { let datePickerView = UIDatePicker() datePickerView.datePickerMode = UIDatePickerMode.Date sender.inputView = datePickerView datePickerView.addTarget(self, action: #selector(SendSMS.showDatePicker), forControlEvents: UIControlEvents.ValueChanged) } func showDatePicker(sender: UIDatePicker) { let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd" let timeFormatter = NSDateFormatter() timeFormatter.dateFormat = "HH:mm:SS" timeField.text = timeFormatter.stringFromDate(sender.date) dateField.text = dateFormatter.stringFromDate(sender.date) } 也包含组件扫描)在我的情况下,问题只是通过声明来解决它作为普通类,然后创建它的bean。我希望这也适合你。

答案 1 :(得分:0)

我不确定您是否可以将字段自动装入WebApplicationInitializer。 Initializer只是一个配置DispatcherServlet和创建Application Context的对象。它不是豆。 您可以尝试:https://www.mkyong.com/spring/spring-how-to-do-dependency-injection-in-your-session-listener/并通过WebApplicationContextUtils获取bean。但对我来说,这似乎不是最好的做法。