网站建设山西,遵义 网站建设,wordpress如何使用模板,软件著作权申请多少钱一个原因#xff1a; netty 中无法使用注入的bean#xff0c;因为NettyClientHandler 是netty启动的时候new出来#xff0c;并没有交给spring IOC托管#xff0c;后面给NettyClientHandler 加上Component 注解也不行#xff0c;因为netty 的加载优于spring容器初始化#xff…原因 netty 中无法使用注入的bean因为NettyClientHandler 是netty启动的时候new出来并没有交给spring IOC托管后面给NettyClientHandler 加上Component 注解也不行因为netty 的加载优于spring容器初始化
解决方案1 想在生成对象时完成某些初始化操作而这些初始化操作又依赖于注入的bean因此可以使用PostConstruct注解一个init方法来完成初始化该方法会在bean注入完成后被自动调用。
public class NettyClientHandler extends ChannelInboundHandlerAdapter {Resourceprivate RedissonUtils redissonUtils;private static NettyClientHandler nettyClientHandler ;PostConstructpublic void init() {nettyClientHandler this;}Overridepublic void channelActive(ChannelHandlerContext ctx) {nettyClientHandler.redissonUtils.getString()}
}
解决方案2 使用工具类来获取需要的bean 实现ApplicationContextAware 接口 import org.springframework.aop.framework.AopContext;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
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;
import com.ruoyi.common.utils.StringUtils;/*** spring工具类 方便在非spring管理环境中获取bean* */
Component
public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware
{/** Spring应用上下文环境 */private static ConfigurableListableBeanFactory beanFactory;private static ApplicationContext applicationContext;Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {SpringUtils.beanFactory beanFactory;}Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {SpringUtils.applicationContext applicationContext;}/*** 获取对象** param name* return Object 一个以所给名字注册的bean的实例* throws org.springframework.beans.BeansException**/SuppressWarnings(unchecked)public static T T getBean(String name) throws BeansException{return (T) beanFactory.getBean(name);}/*** 获取类型为requiredType的对象** param clz* return* throws org.springframework.beans.BeansException**/public static T T getBean(ClassT clz) throws BeansException{T result (T) beanFactory.getBean(clz);return result;}/*** 如果BeanFactory包含一个与所给名称匹配的bean定义则返回true** param name* return boolean*/public static boolean containsBean(String name){return beanFactory.containsBean(name);}/*** 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到将会抛出一个异常NoSuchBeanDefinitionException** param name* return boolean* throws org.springframework.beans.factory.NoSuchBeanDefinitionException**/public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException{return beanFactory.isSingleton(name);}/*** param name* return Class 注册对象的类型* throws org.springframework.beans.factory.NoSuchBeanDefinitionException**/public static Class? getType(String name) throws NoSuchBeanDefinitionException{return beanFactory.getType(name);}/*** 如果给定的bean名字在bean定义中有别名则返回这些别名** param name* return* throws org.springframework.beans.factory.NoSuchBeanDefinitionException**/public static String[] getAliases(String name) throws NoSuchBeanDefinitionException{return beanFactory.getAliases(name);}/*** 获取aop代理对象* * param invoker* return*/SuppressWarnings(unchecked)public static T T getAopProxy(T invoker){return (T) AopContext.currentProxy();}/*** 获取当前的环境配置无配置返回null** return 当前的环境配置*/public static String[] getActiveProfiles(){return applicationContext.getEnvironment().getActiveProfiles();}/*** 获取当前的环境配置当有多个环境配置时只获取第一个** return 当前的环境配置*/public static String getActiveProfile(){final String[] activeProfiles getActiveProfiles();return StringUtils.isNotEmpty(activeProfiles) ? activeProfiles[0] : null;}/*** 获取配置文件中的值** param key 配置文件的key* return 当前的配置文件的值**/public static String getRequiredProperty(String key){return applicationContext.getEnvironment().getRequiredProperty(key);}
}