SpringBoot实现其他普通类调用Spring管理的Service,dao等bean
程序员文章站
2022-06-23 12:11:01
目录普通类调用spring管理的service、dao等bean举个使用情景下面来看我给出的解决办法普通类中使用service、dao层中的类,只需三步1、写一个工具类 springutil2、在ap...
普通类调用spring管理的service、dao等bean
在springboot的使用中,有时需要在其他的普通类中调用托管给spring的dao或者service,从而去操作数据库。网上大多数的资料都是说添加一些注解什么的,但是这都是不行的。
举个使用情景
比如在服务器在于硬件或者客户端之间进行socket通讯时,那么如果说服务器收到了一条消息,需要去操作数据库的话,怎么去调用service或者dao去操作数据库呢?
下面来看我给出的解决办法
(1)首先需要新建一个类,实现 applicationcontextaware 接口。
@component public class springutils implements applicationcontextaware { private static applicationcontext applicationcontext = null; @override public void setapplicationcontext(applicationcontext applicationcontext) throws beansexception { if(springutils.applicationcontext == null){ springutils.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); } }
(2)在通讯类中获取applicationcontext对象,然后去获取需要的service 或者 dao。
然后就可以直接调用了。
普通类中使用service、dao层中的类,只需三步
在一个web项目的jsp中想要使用service中的一个类来获取数据库中的数据,但是用完之后报错说是空指针异常,上网查了之后总结了一下解决办法,只需三步。
1、写一个工具类 springutil
package com.shop.util; import org.springframework.beans.beansexception; import org.springframework.context.applicationcontext; import org.springframework.context.applicationcontextaware; public final class springutil implements applicationcontextaware { private static applicationcontext applicationcontext = null; @override public void setapplicationcontext(applicationcontext applicationcontext) throws beansexception { // todo auto-generated method stub if (springutil.applicationcontext == null) { springutil.applicationcontext = applicationcontext; system.out.println( "========applicationcontext配置成功,在普通类可以通过调用toolspring.getappcontext()获取applicationcontext对象,applicationcontext=" + applicationcontext + "========"); } } public static applicationcontext getapplicationcontext() { return applicationcontext; } //通过 public static object getbean(string name) { return getapplicationcontext().getbean(name); } //通过class获取bean. public static <t> t getbean(class<t> clazz){ return getapplicationcontext().getbean(clazz); } }
2、在application启动类中将工具类导入
不然依然无法使用
3、在applicationtests测试类中调用
package com.shop.jzshop; import org.junit.test; import org.junit.runner.runwith; import org.springframework.boot.test.context.springboottest; import org.springframework.test.context.junit4.springrunner; import com.shop.serviceimpl.goodsserviceimpl; import com.shop.util.springutil; @runwith(springrunner.class) @springboottest public class jzshopapplicationtests { @test public void contextloads() { //goodsserviceimpl为我想要获取的service层中的类 goodsserviceimpl goodsserviceimpl = (goodsserviceimpl)springutil.getbean(goodsserviceimpl.class); system.out.println(goodsserviceimpl.getgoodsbyid(27).getgoodsname()); } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。