Cool
Cool
Published on 2021-10-29 / 37 Visits
0
0

在非spring 管理的类中,使用spring 管理的服务,解决无法注入问题

类的上面没有spring 的注解,所以下面的 @Autowired 是无效的

Snipaste_2021-10-29_08-24-42.png

解决方案 增加一个获取bean的工具类 通过工具类取得spring管理的bean


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

@Component
public class GetBeanUtil implements ApplicationContextAware {
    protected static ApplicationContext applicationContext ;
 
    @Override
    public void setApplicationContext(ApplicationContext arg0) throws BeansException {
        if (applicationContext == null) {
            applicationContext = arg0;
        }
 
    }
    public static Object getBean(String name) {
        //name表示其他要注入的注解name名
        return applicationContext.getBean(name);
    }
    /**
     * 拿到ApplicationContext对象实例后就可以手动获取Bean的注入实例对象
     */
    public static <T> T getBean(Class<T> clazz) {
        return applicationContext.getBean(clazz);
    }
}

调用

 BaseDao dao = GetBeanUtil.getBean(BaseDao.class);
List<String> list = dao.singleList("SELECT name FROM u_role");

Comment