Issue210.java

package com.alibaba.fastjson2.benchmark;

import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.JSONPath;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.runner.RunnerException;

import java.util.function.BiFunction;
import java.util.function.Function;

public class Issue210 {
    static final JSONPath jsonPath = JSONPath.of("$.password");
    static final Sha256BiFunction callbackBiFunction = new Sha256BiFunction();
    static final JSONObject object;
    static final Bean bean;

    static {
        bean = new Bean();
        bean.password = "12345678";
        object = JSONObject.of("password", bean.password);
    }

    @Benchmark
    public void objectSet() {
        jsonPath.setCallback(object, callbackBiFunction);
    }

    @Benchmark
    public void beanSet() {
        jsonPath.setCallback(bean, callbackBiFunction);
    }

    static final class Sha256BiFunction
            implements BiFunction {
        @Override
        public Object apply(Object o, Object o2) {
            String str = (String) o2;
            return str;
        }
    }

    static final class Sha256
            implements Function {
        @Override
        public Object apply(Object val) {
            String str = (String) val;
            return str;
        }
    }

    public static class Bean {
        private String password;

        public Bean() {
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }
    }

    public static void main(String[] args) throws RunnerException {
        new Issue210().beanSet();
//        Options options = new OptionsBuilder()
//                .include(Issue210.class.getName())
//                .mode(Mode.Throughput)
//                .timeUnit(TimeUnit.MILLISECONDS)
//                .forks(1)
//                .build();
//        new Runner(options).run();
    }
}