4
回答
java线程中如何使用spring注入
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

在线程或其他协议访问系统时使用@Resource无法自动注入

查了很多资料,说spring为了安全所以不会自动注入。

我的架构是 spring mvc+spring+mybatis

我们系统中有我们自定义的协议访问我们系统时调用service需要处理一些业务,但是调用这个service的时候报空指针异常,无法自动注入,网上说带参数的形式做,但是这个线程启动开始就没有注入过。

其他资料中说 实现applicationContextAware类创建工具类获取spring的bean,但是也有问题,service业务类里还有很多需要自动注入的对象,不可能把所有的对象都按照这种方式全部改变,那还不如项目上的所有spring自动注入取消都改成applicationContextAware中获取了。

有没有其他方法获取、或配置spring后变成自动注入?

在这个系统中我们在监听一种设备的信息,使用Jpcap.jar包获取这些设备信息,每次网络上有信息时会启动一个线程运行业务,现在就是这个线程无法自动注入

有大牛解决了这个问题的人吗?

举报
學楽
发帖于1年前 4回/906阅

以下是问题补充:

  • @學楽 :应该算是解决了吧,我用getBean后发现 调用的接口中的其他注入对象会自动注入 (1年前)
共有4个答案 最后回答: 1年前

方法1 使用Spring自己的TaskExecutor,文档看这里:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#scheduling

方法2 创建线程对象(或Runnable对象)的Bean需要是Spring的Bean,使用获取到AutowireCapableBeanFactory(使用BeanFactoryAware注入后强转获得),然后调用他的autowire()和autowireBean()都能实现为非Spring容器Bean注入属性。(这个接口还有很多方法都可以用于非容器内对象按Spring的方式进行初始化和销毁的)

--- 共有 1 条评论 ---
學楽谢谢,解决问题❀.(*´▽`*)❀. 1年前 回复
如果线程需要调用A类的方法B,则可以将A类的实例作为参数传给Runable,然后由run方法来调用方法B,A类可以放置C、D等spring bean
--- 共有 1 条评论 ---
學楽谢谢您的回答,解决了问题了❀.(*´▽`*)❀. 1年前 回复
顶部