java - Servlet 获取 spring管理的bean
PHP中文网
PHP中文网 2017-04-18 09:24:46
0
1
502

项目里面想在servlet用spring注入的service等bean的时候,报空指针异常,网上的解释:

其实我们使用spring的目的就是为了让spring为我们来提供一个已经被注入好的一个实例。而servlet是不同的,servlet是有生命周期的,而这个并不归属spring管理,而是由web容器管理的。那么当servlet刚刚创建的时候,spring可以为servlet注入,当你访问的时候,由于servlet是单实例多线程的,所以,servlet信息被重置,刚刚被注入的对象又为null了。

我有一些问题,

  1. servlet是单实例的,但是如果我注入的bean是成员变量,那么即使是多次请求,这个bean 也是在堆内存里面,为什么servlet信息会被重置呢?

  2. 如果是spring mvc,为什么在controller里面可以直接调用其他spring 容器管理的bean。

  3. 如果我在servlet里面调用service , service里面再调用spring注入的bean还会有空指针的问题吗?

谢谢.

PHP中文网
PHP中文网

认证高级PHP讲师

membalas semua(1)
Peter_Zhu

Seperti yang anda katakan: Servlet ialah satu contoh, hanya terdapat satu objek Servlet dalam bekas untuk mengendalikan semua permintaan pelanggan, oleh itu:

1. Servlet boleh menyimpan beberapa data global atau tidak berubah, tetapi data berkaitan pengguna tidak seharusnya disimpan, berbilang pengguna akan mengendalikan data ini dalam urutan yang berbeza pada masa yang sama, yang akan menyebabkan kekeliruan.

2. Terdapat juga Servlet dalam mvc, tetapi servlet ini akan mencipta Pengawal baru setiap kali ia membuat permintaan, supaya dalam pemprosesan permintaan Servlet, data tidak mengganggu satu sama lain. Selain itu, secara amnya kacang yang diuruskan oleh spring akan disimpan dalam objek seperti ThreadLocal Selepas pengawal diproses, ThreadLocal akan dibersihkan.

3. Sebab yang sama seperti di atas Jika anda menulisnya secara berasingan, anda harus membuat perkhidmatan baharu, dan akhirnya membersihkan ThreadLocal selepas pemprosesan selesai. mengakibatkan data tidak dapat diramalkan.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!