SpringBoot实现其他普通类调用Spring管理的Service,dao等bean

网友投稿 287 2022-11-22

SpringBoot实现其他普通类调用Spring管理的Service,dao等bean

目录普通类调用Spring管理的Service、dao等bean举个使用情景下面来看我给出的解决办法普通类中使AujMee用service、dao层中的类,只需三步1、写一个工具类 SpringUtil2、在Application启动类中将工具类导入3、在ApplicationTests测试类中调用

普通类调用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() {

http:// return applicationContext;

}

//通过name获取 Bean.

public static Object getBean(String name){

return getApplicationContext().getBean(name);

}

//通过class获取Bean.

public static T getBean(Class clazz){

return getApplicationContext().getBean(clazz);

}

//通过name,以及Clazz返AujMee回指定的Bean

public static T getBean(String name,Class 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.appAujMeelicationContext == 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 getBean(Class 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());

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:kafka的常规操作命令
下一篇:什么是串行端口,它一般分为哪几种类
相关文章

 发表评论

暂时没有评论,来抢沙发吧~