软件编程
位置:首页>> 软件编程>> java编程>> 解决SpringMvc中普通类注入Service为null的问题

解决SpringMvc中普通类注入Service为null的问题

作者:猫猫桑  发布时间:2023-10-29 01:23:25 

标签:SpringMvc,注入,Service,null

SpringMvc中普通类注入Service为null

场景:

使用Quartz定时器时,普通的java类需要注入spring的service类,在调用时报错!

解决方式:


   /**
    * 定时获取课程的service
    */
   @Autowired
   protected QuartzGetCourseService quartzGetCourseService = (QuartzGetCourseService) SpringContextUtil
           .getBean("quartzGetCourseService");

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
* 在Spring 注解中,普通类获取@Service标记的方法或者bean对象
*
*/
@Component
public class SpringContextUtil implements ApplicationContextAware {
   private static ApplicationContext applicationContext = null;

@Override
   public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
       SpringContextUtil.applicationContext = applicationContext;
   }

public static ApplicationContext getApplicationContext() {
       return applicationContext;
   }

/**
    * 注意 bean name默认 = 类名(首字母小写) 例如: A8sClusterDao = getBean("a8sClusterDao")
    *
    * @param name
    * @return
    * @throws BeansException
    */
   public static Object getBean(String name) throws BeansException {
       return applicationContext.getBean(name);
   }

/**
    * 根据类名获取到bean
    *
    * @param <T>
    * @param clazz
    * @return
    * @throws BeansException
    */
   @SuppressWarnings("unchecked")
   public static <T> T getBeanByName(Class<T> clazz) throws BeansException {
       try {
           char[] cs = clazz.getSimpleName().toCharArray();
           cs[0] += 32;// 首字母大写到小写
           return (T) applicationContext.getBean(String.valueOf(cs));
       }
       catch (Exception e) {
           e.printStackTrace();
           return null;
       }
   }

public static boolean containsBean(String name) {
       return applicationContext.containsBean(name);
   }

public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
       return applicationContext.isSingleton(name);
   }
}

调用结束,测试可以获取Service.

spring之工具类使用service注入

一般需要在一个工具类中使用@Autowired 注解注入一个service。但是由于工具类方法一般都写成static,所以直接注入就存在问题。

栗子:


@Component  
public class SmsController {    
   private static Logger logger = LoggerFactory.getLogger(SmsController.class);    
   @Autowired  
   private MessagesInfoService messagesInfoService;  
   private static SmsController smsController;    

@PostConstruct  
   public void init() {  
       smsController = this;  
       smsController.messagesInfoService = this.messagesInfoService;    
   }  

/**
    *短信历史查询接口(查询某个时间段发送的短信)
    */
   @RequestMapping(value = "/queryMessage",method = RequestMethod.GET)
   public ModelAndView queryMessage{
       pager = messagesInfoService.findPager(map,5,pIndex);
       ModelAndView modelAndView = new ModelAndView("manage/jgdxgl/jgdx_qm");
       List<MessagesInfo> list = pager.getItem();
       modelAndView.addObject("pager",pager);
       modelAndView.addObject("list",list);
       return modelAndView
   }      
}

来源:https://blog.csdn.net/u011429743/article/details/81111151

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com