Java开发工作问题整理与记录

1、为什么@Autowired不能注入static成员属性

复制代码
扫描Class类需要注入的元数据的时候,直接选择忽略掉了static成员(包括属性和方法)
Spring 依赖注入是依赖set方法, set方法是普通的对象方法,static变量是类的属性
复制代码
AutowiredAnnotationBeanPostProcessor:
 
// 构建@Autowired注入元数据方法
// 简单的说就是找到该Class类下有哪些是需要做依赖注入的
private InjectionMetadata buildAutowiringMetadata(final Class<?> clazz) {
    ...
    // 循环递归,因为父类的也要管上
    do {
        // 遍历所有的字段(包括静态字段)
        ReflectionUtils.doWithLocalFields(targetClass, field -> {
            if (Modifier.isStatic(field.getModifiers())) {
                logger.info("Autowired annotation is not supported on static fields: " + field);
            }
            return;
            ...
        });
        // 遍历所有的方法(包括静态方法)
        ReflectionUtils.doWithLocalMethods(targetClass, method -> {
            if (Modifier.isStatic(method.getModifiers())) {
                logger.info("Autowired annotation is not supported on static methods: " + method);
            }
            return;
            ...
        });
        ...
        targetClass = targetClass.getSuperclass();
    } while (targetClass != null && targetClass != Object.class);
    ...
}

2、static方法里用@Autowire或者@Resource注入的属性

首先 类加@Component注解,使当前类成为bean

然后 定义statis类成员

然后 创建 init()方法,用@PostConstruct注解修饰

最后init()方法中,把需要加载的类复制给static类

复制代码
@Component
public class DemoCode {

    @Autowired
    private DemoService demoService;

    public static DemoService demoServiceNew;

    /**
     * 解决 static方法调用  注入的service为null
     */
    @PostConstruct
    public void init(){
        demoServiceNew = demoService;
    }
 }

3、处理string类型的json串中的反斜杠

导入commons-lang3的jar包

<dependency>

<groupId>org.apache.commons</groupId>

<artifactId>commons-lang3</artifactId>

<version>3.8.1</version>

</dependency>

复制代码
public static void main(String[] args) {
        String s="{\\\"displayName\\\":\\\"\\\",\\\"id\\\":1401524465412907010,\\\"name\\\":\\\"名称\\\",\\\"source\\\":\\\"\\\",\\\"type\\\":\\\"text\\\",\\\"value\\\":\\\"红细胞计数\\\"}";
        String tmp = StringEscapeUtils.unescapeJava(s);
        System.out.println(tmp);
    }

//输出结果
//{"displayName":"","id":1401524465412907010,"name":"名称","source":"","type":"text","value":"红细胞计数"}

4、对象拷贝的方法

import org.springframework.beans.BeanUtils;

BeanUtils.copyProperties(原始对象, 新对象);

相关推荐
写代码的小阿帆1 小时前
Java体系总结——从基础语法到微服务
java·微服务·学习方法
CUMT_DJ2 小时前
matlab计算算法的运行时间
开发语言·算法·matlab
SUPER52663 小时前
FastApi项目启动失败 got an unexpected keyword argument ‘loop_factory‘
java·服务器·前端
咕噜咕噜啦啦4 小时前
Eclipse集成开发环境的使用
java·ide·eclipse
Overboom5 小时前
[C++] --- 常用设计模式
开发语言·c++·设计模式
Univin5 小时前
C++(10.4)
开发语言·数据结构·c++
KyollBM5 小时前
每日羊题 (质数筛 + 数学 | 构造 + 位运算)
开发语言·c++·算法
光军oi6 小时前
全栈开发杂谈————关于websocket若干问题的大讨论
java·websocket·apache
weixin_419658316 小时前
Spring 的统一功能
java·后端·spring
Paul_09207 小时前
golang面经——map模块和sync.Map模块
开发语言