71 lines
2.0 KiB
Java
71 lines
2.0 KiB
Java
package com.starry.common.utils;
|
|
|
|
import org.springframework.aop.framework.AopContext;
|
|
import org.springframework.beans.BeansException;
|
|
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
|
|
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
|
|
import org.springframework.context.ApplicationContext;
|
|
import org.springframework.context.ApplicationContextAware;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
/**
|
|
* @author admin
|
|
* spring工具类 方便在非spring管理环境中获取bean
|
|
* @since 2022/7/28
|
|
*/
|
|
@Component
|
|
public class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware {
|
|
|
|
/**
|
|
* Spring应用上下文环境
|
|
*/
|
|
private static ConfigurableListableBeanFactory beanFactory;
|
|
|
|
private static ApplicationContext applicationContext;
|
|
|
|
/**
|
|
* 获取类型为requiredType的对象
|
|
*
|
|
* @param clz
|
|
* @return
|
|
* @throws BeansException
|
|
*/
|
|
public static <T> T getBean(Class<T> clz) throws BeansException {
|
|
T result = (T) beanFactory.getBean(clz);
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* 获取对象
|
|
*
|
|
* @param name
|
|
* @return Object 一个以所给名字注册的bean的实例
|
|
* @throws BeansException
|
|
*/
|
|
@SuppressWarnings("unchecked")
|
|
public static <T> T getBean(String name) throws BeansException {
|
|
return (T) beanFactory.getBean(name);
|
|
}
|
|
|
|
/**
|
|
* 获取aop代理对象
|
|
*
|
|
* @param invoker
|
|
* @return
|
|
*/
|
|
@SuppressWarnings("unchecked")
|
|
public static <T> T getAopProxy(T invoker) {
|
|
return (T) AopContext.currentProxy();
|
|
}
|
|
|
|
@Override
|
|
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
|
|
SpringUtils.beanFactory = beanFactory;
|
|
}
|
|
|
|
@Override
|
|
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
|
|
SpringUtils.applicationContext = applicationContext;
|
|
}
|
|
}
|