Spring MVC 普通類調用service層方法

在Spring MVC中,Controller中使用service只需使用註解@Resource/@Autowired就行,但是一般類(即不使用@Controller註解的類)要用到service時,Spring中的Service不是你想new就能new的,因爲通過new實例化的對象脫離了Spring容器的管理,獲取不到註解的屬性值,所以會是null,就算調用service的類中有@Component註解加入了Spring容器管理,也還是null.

一、普通類與工具類共同的解決方法:

這裏的普通類指的:是不在spring容器管理下的類,是通過new 來實例化的類。

1、SpringContextUtil

 

package com.fh.interceptor;

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

/**
 * Created by 小胡 on 2020/6/17.
 */
public class SpringContextUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext;  

    // 下面的這個方法上加了@Override註解,原因是繼承ApplicationContextAware接口是必須實現的方法
    @Override
    public void setApplicationContext(ApplicationContext applicationContext)
            throws BeansException {
        SpringContextUtil.applicationContext = applicationContext;
    }

    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    public static Object getBean(String name) throws BeansException {//name 指需要調用的service的名稱 此處不是隨意填寫的
        return applicationContext.getBean(name);
    }

    public static Object getBean(String name, Class requiredType)
            throws BeansException {
        return applicationContext.getBean(name, requiredType);
    }

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

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

    public static Class getType(String name)    throws NoSuchBeanDefinitionException {
        return applicationContext.getType(name);
    }

    public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {
        return applicationContext.getAliases(name);
    }
}

 

2、Spring的配置文件application.xml中進行如下配置

<bean id="SpringContextUtil" class="com.fh.interceptor.SpringContextUtil" scope="singleton"></bean>

 3、使用

PayService payService = (PayService) SpringContextUtil.getBean("payService");

這樣就可以在普通類中調用service中的任何方法,親測有效!歡迎指正

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章