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(原始对象, 新对象);

相关推荐
_oP_i2 小时前
RabbitMQ 队列配置设置 RabbitMQ 消息监听器的并发消费者数量java
java·rabbitmq·java-rabbitmq
Monkey-旭2 小时前
Android Bitmap 完全指南:从基础到高级优化
android·java·人工智能·计算机视觉·kotlin·位图·bitmap
我爱996!2 小时前
SpringMVC——响应
java·服务器·前端
小宋10213 小时前
多线程向设备发送数据
java·spring·多线程
天若有情6733 小时前
【python】Python爬虫入门教程:使用requests库
开发语言·爬虫·python·网络爬虫·request
大佐不会说日语~4 小时前
Redis高频问题全解析
java·数据库·redis
寒水馨4 小时前
Java 17 新特性解析与代码示例
java·开发语言·jdk17·新特性·java17
启山智软4 小时前
选用Java开发商城的优势
java·开发语言
秃然想通4 小时前
掌握Python三大语句:顺序、条件与循环
开发语言·python·numpy