string(14) "127.0.0.1:9200" URL: http://127.0.0.1:9200/likecs_art_db/_search
REQUEST:
Array
(
    [query] => Array
        (
            [match] => Array
                (
                    [text] => Array
                        (
                            [query] => java-动态代理
                        )

                )

        )

    [highlight] => Array
        (
            [fields] => Array
                (
                    [text] => stdClass Object
                        (
                        )

                )

            [pre_tags] => #em#
            [post_tags] => #/em#
        )

    [size] => 8
    [from] => 0
)
RESPONSE:
string(7118) "{"took":15,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":10000,"relation":"gte"},"max_score":22.69352,"hits":[{"_index":"likecs_art_db","_type":"_doc","_id":"80313","_score":22.69352,"_source":{"id":"80313","text":"java-\u52a8\u6001\u4ee3\u7406","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"zhh19981104","tagsname":"","tagsid":"[]","catesname":"","catesid":"[]","createtime":"1573120877"},"highlight":{"text":["#em#java#/em#-#em#动#/em##em#态#/em##em#代#/em##em#理#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"119399","_score":22.69352,"_source":{"id":"119399","text":"Java\u52a8\u6001\u4ee3\u7406","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"xxkj","tagsname":"","tagsid":"[]","catesname":"","catesid":"[]","createtime":"1605012929"},"highlight":{"text":["#em#Java#/em##em#动#/em##em#态#/em##em#代#/em##em#理#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"13370","_score":22.69352,"_source":{"id":"13370","text":"Java\u52a8\u6001\u4ee3\u7406","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"Finley","tagsname":"","tagsid":"[]","catesname":"","catesid":"[]","createtime":"1523094168"},"highlight":{"text":["#em#Java#/em##em#动#/em##em#态#/em##em#代#/em##em#理#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"130658","_score":22.69352,"_source":{"id":"130658","text":"java\u52a8\u6001\u4ee3\u7406","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"night-rainy","tagsname":null,"tagsid":"","catesname":null,"catesid":"","createtime":"1640722333"},"highlight":{"text":["#em#java#/em##em#动#/em##em#态#/em##em#代#/em##em#理#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"678094","_score":22.69352,"_source":{"id":"678094","text":"java\u52a8\u6001\u4ee3\u7406","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"XiOrang","tagsname":null,"tagsid":"","catesname":null,"catesid":"","createtime":"1635834657"},"highlight":{"text":["#em#java#/em##em#动#/em##em#态#/em##em#代#/em##em#理#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"691295","_score":22.69352,"_source":{"id":"691295","text":"Java\u52a8\u6001\u4ee3\u7406","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"mengd","tagsname":"","tagsid":"","catesname":null,"catesid":"","createtime":"1635933313"},"highlight":{"text":["#em#Java#/em##em#动#/em##em#态#/em##em#代#/em##em#理#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"905012","_score":22.69352,"_source":{"id":"905012","text":"java \u52a8\u6001\u4ee3\u7406","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"Ehtan","tagsname":"","tagsid":"","catesname":null,"catesid":"","createtime":"1638463417"},"highlight":{"text":["#em#java#/em# #em#动#/em##em#态#/em##em#代#/em##em#理#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"203346024","_score":22.69352,"_source":{"id":"203346024","text":"Java \u52a8\u6001\u4ee3\u7406","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"cncsl","tagsname":"","tagsid":"[]","catesname":"Java","catesid":"[\"107\"]","createtime":"1642658448"},"highlight":{"text":["#em#Java#/em# #em#动#/em##em#态#/em##em#代#/em##em#理#/em#"]}}]}}"
string(14) "127.0.0.1:9200" URL: http://127.0.0.1:9200/likecs_art_db/_search
REQUEST:
Array
(
    [query] => Array
        (
            [match] => Array
                (
                    [text] => Array
                        (
                            [query] => java-动态代理
                        )

                )

        )

    [highlight] => Array
        (
            [fields] => Array
                (
                    [text] => stdClass Object
                        (
                        )

                )

            [pre_tags] => #em#
            [post_tags] => #/em#
        )

    [size] => 8
    [from] => 8
)
RESPONSE:
string(7898) "{"took":16,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":10000,"relation":"gte"},"max_score":22.69352,"hits":[{"_index":"likecs_art_db","_type":"_doc","_id":"203383995","_score":22.665916,"_source":{"id":"203383995","text":"java\u52a8\u6001\u4ee3\u7406\u4e0e\u9759\u6001\u4ee3\u7406","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"","tagsname":null,"tagsid":"","catesname":null,"catesid":"","createtime":"1632421419"},"highlight":{"text":["#em#java#/em##em#动#/em##em#态#/em##em#代#/em##em#理#/em#与静#em#态#/em##em#代#/em##em#理#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"80435","_score":22.088257,"_source":{"id":"80435","text":"java\u4e2d\u7684\u9759\u6001\u4ee3\u7406\u3001jdk\u52a8\u6001\u4ee3\u7406\u548ccglib\u52a8\u6001\u4ee3\u7406","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"yanggb","tagsname":"","tagsid":"","catesname":"","catesid":"","createtime":"1573194674"},"highlight":{"text":["#em#java#/em#中的静#em#态#/em##em#代#/em##em#理#/em#、jdk#em#动#/em##em#态#/em##em#代#/em##em#理#/em#和cglib#em#动#/em##em#态#/em##em#代#/em##em#理#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"8540","_score":22.088257,"_source":{"id":"8540","text":"017 Java\u4e2d\u7684\u9759\u6001\u4ee3\u7406\u3001JDK\u52a8\u6001\u4ee3\u7406\u3001cglib\u52a8\u6001\u4ee3\u7406","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"nnngu","tagsname":"","tagsid":"[]","catesname":"Java\u57fa\u7840","catesid":"[\"275\"]","createtime":"1519461207"},"highlight":{"text":["017 #em#Java#/em#中的静#em#态#/em##em#代#/em##em#理#/em#、JDK#em#动#/em##em#态#/em##em#代#/em##em#理#/em#、cglib#em#动#/em##em#态#/em##em#代#/em##em#理#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"203317992","_score":22.062338,"_source":{"id":"203317992","text":"Java\u7684\u9759\u6001\u4ee3\u7406\u548c\u52a8\u6001\u4ee3\u7406","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"","tagsname":null,"tagsid":"","catesname":null,"catesid":"","createtime":"1641164200"},"highlight":{"text":["#em#Java#/em#的静#em#态#/em##em#代#/em##em#理#/em#和#em#动#/em##em#态#/em##em#代#/em##em#理#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"73151","_score":21.753267,"_source":{"id":"73151","text":"java \u4ee3\u7406\u6a21\u5f0f-\u9759\u6001\u4ee3\u7406\u4e0e\u52a8\u6001\u4ee3\u7406","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"arebirth","tagsname":"","tagsid":"[]","catesname":"","catesid":"[]","createtime":"1568123839"},"highlight":{"text":["#em#java#/em# #em#代#/em##em#理#/em#模式-静#em#态#/em##em#代#/em##em#理#/em#与#em#动#/em##em#态#/em##em#代#/em##em#理#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"95942","_score":21.749025,"_source":{"id":"95942","text":"Java\u7684\u52a8\u6001\u4ee3\u7406","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"leyvan","tagsname":"","tagsid":"[]","catesname":"","catesid":"[]","createtime":"1584341126"},"highlight":{"text":["#em#Java#/em#的#em#动#/em##em#态#/em##em#代#/em##em#理#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"17950","_score":21.749025,"_source":{"id":"17950","text":"Java\u52a8\u6001\u4ee3\u7406\uff08\u4e00\uff09","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"liaoweipeng","tagsname":"","tagsid":"[]","catesname":"Java","catesid":"[\"107\"]","createtime":"1526303233"},"highlight":{"text":["#em#Java#/em##em#动#/em##em#态#/em##em#代#/em##em#理#/em#(一)"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"43046","_score":21.749025,"_source":{"id":"43046","text":"Java\u7684\u52a8\u6001\u4ee3\u7406","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"zhizaixingzou","tagsname":"","tagsid":"[]","catesname":"Java\u8bed\u8a00\u57fa\u7840\u53ca\u4e13\u9898","catesid":"[\"5823\"]","createtime":"1544100370"},"highlight":{"text":["#em#Java#/em#的#em#动#/em##em#态#/em##em#代#/em##em#理#/em#"]}}]}}"
string(14) "127.0.0.1:9200" URL: http://192.168.101.128/searchcore/index.php/cihere_cn_db/_search
REQUEST:
Array
(
    [query] => Array
        (
            [match] => Array
                (
                    [title] => Array
                        (
                            [query] => java-动态代理
                        )

                )

        )

    [highlight] => Array
        (
            [fields] => Array
                (
                    [title] => stdClass Object
                        (
                        )

                )

            [pre_tags] => #em#
            [post_tags] => #/em#
        )

    [from] => 0
)
RESPONSE:
bool(false)
string(14) "127.0.0.1:9200" URL: http://127.0.0.1:9200/likecs_down_db/_search
REQUEST:
Array
(
    [query] => Array
        (
            [bool] => Array
                (
                    [must] => Array
                        (
                            [0] => Array
                                (
                                    [match] => Array
                                        (
                                            [title] => Array
                                                (
                                                    [query] => java-动态代理
                                                )

                                        )

                                )

                        )

                    [must_not] => Array
                        (
                            [0] => Array
                                (
                                    [term] => Array
                                        (
                                            [cate1] => 电子书籍
                                        )

                                )

                        )

                )

        )

    [highlight] => Array
        (
            [fields] => Array
                (
                    [title] => stdClass Object
                        (
                        )

                )

            [pre_tags] => #em#
            [post_tags] => #/em#
        )

    [size] => 5
    [from] => 0
)
RESPONSE:
string(2935) "{"took":13,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":8926,"relation":"eq"},"max_score":14.396936,"hits":[{"_index":"likecs_down_db","_type":"_doc","_id":"52532","_score":14.396936,"_source":{"id":"52532","title":"JavaScript Ajax\u52a8\u6001\u8d2d\u7269\u8f66\u4ee3\u7801","spidertime":"1623057187","contenttime":"1624516178","pageimage":"https:\/\/img.jbzj.com\/do\/uploads\/userup\/1002\/12110GS2Q.gif","tag":"javascript|ajax|\u52a8\u6001\u8d2d\u7269\u8f66","cate1":"js\u6846\u67b6","cate2":"ajax\/javascript","attr1":"22KB"},"highlight":{"title":["JavaScript Ajax#em#动#/em##em#态#/em#购物车#em#代#/em#码"]}},{"_index":"likecs_down_db","_type":"_doc","_id":"59363","_score":13.880903,"_source":{"id":"59363","title":"java\u5b9e\u73b0\u5185\u5b58\u52a8\u6001\u5206\u914d word\u7248","spidertime":"1623066705","contenttime":"1671749138","pageimage":"https:\/\/img.jbzj.com\/do\/uploads\/litimg\/160620\/1035415Q3V.png","tag":"java\u5185\u5b58\u52a8\u6001\u5206\u914d|Java","cate1":"\u7535\u5b50\u4e66\u7c4d","cate2":"\u7f16\u7a0b\u5f00\u53d1","cate3":"java\u7535\u5b50\u4e66","attr1":"67.8KB"},"highlight":{"title":["#em#java#/em#实现内存#em#动#/em##em#态#/em#分配 word版"]}},{"_index":"likecs_down_db","_type":"_doc","_id":"72317","_score":13.291586,"_source":{"id":"72317","title":"JAVA\u52a8\u6001\u751f\u6210word\u548cpdf \u4e2d\u6587WORD\u7248","spidertime":"1623128463","contenttime":"1676699327","pageimage":"https:\/\/img.jbzj.com\/do\/uploads\/litimg\/161119\/0T602592610.png","tag":"Java|\u52a8\u6001\u751f\u6210|Word|pdf","cate1":"\u7535\u5b50\u4e66\u7c4d","cate2":"\u7f16\u7a0b\u5f00\u53d1","cate3":"java\u7535\u5b50\u4e66","attr1":"10KB"},"highlight":{"title":["#em#JAVA#/em##em#动#/em##em#态#/em#生成word和pdf 中文WORD版"]}},{"_index":"likecs_down_db","_type":"_doc","_id":"53272","_score":13.063127,"_source":{"id":"53272","title":"jquery+css3\u52a8\u6001\u5706\u5708\u8fd0\u52a8\u80cc\u666f\u7279\u6548\u4ee3\u7801","spidertime":"1623058258","contenttime":"1675823074","pageimage":"https:\/\/img.jbzj.com\/do\/uploads\/litimg\/131218\/104RH1H51.gif","tag":"jquery|CSS3|\u52a8\u6001\u8fd0\u52a8|\u5706\u5708\u80cc\u666f","cate1":"js\u6846\u67b6","cate2":"jQuery","attr1":"26KB"},"highlight":{"title":["jquery+css3#em#动#/em##em#态#/em#圆圈运#em#动#/em#背景特效#em#代#/em#码"]}},{"_index":"likecs_down_db","_type":"_doc","_id":"397","_score":13.063127,"_source":{"id":"397","title":"\u767e\u5ea6LOGO\u52a8\u6001\u821e\u52a8\u7684\u9f99\u6548\u679c\u7684\u4ee3\u7801","spidertime":"1622859823","contenttime":"1677299768","pageimage":"https:\/\/img.jbzj.com\/do\/uploads\/litimg\/120509\/094KGE961.gif","tag":"\u9f99|\u52a8\u6001","cate1":"\u5e7f\u544a\u4ee3\u7801","cate2":"\u5176\u4ed6\u4ee3\u7801","attr1":"90KB"},"highlight":{"title":["百度LOGO#em#动#/em##em#态#/em#舞#em#动#/em#的龙效果的#em#代#/em#码"]}}]}}"
java-动态代理 - 爱码网
zhh19981104

一、Java自带的动态代理

1、概述: 

JDK动态代理主要涉及java.lang.reflect包下的Proxy类和InvocationHandler接口。 JDK代理实现的三个要点:

  通过java.lang.reflect.Proxy类来动态生成代理类
  代理类要实现InvocationHandler接口
  JDK代理只能基于接口进行动态代理

2、代码结构

                            

 

 

3、Jdk_ProxyService

package com.turtle.jdk;

public interface Jdk_ProxyService {

    public void doUpdate();

    public void doSave(String name);

    public String doFind();

}

 

 

4、Jdk_ProxyServiceImpl

package com.turtle.jdk;

/**
 * JDk的动态代理一定要满足实现接口的步骤
 */
public class Jdk_ProxyServiceImpl implements Jdk_ProxyService {

    @Override
    public void doUpdate() {
        System.out.println("进行更新操作");
    }

    @Override
    public void doSave(String name) {
        System.out.println("进行保存操作==="+name);
    }

    @Override
    public String doFind() {
        System.out.println("进行查询操作");
        return "SUCCESS";
    }
}

 

 

5、Jdk_MyInvocationHandler

package com.turtle.jdk;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

// 代理类
public class Jdk_MyInvocationHandler implements InvocationHandler {

    // 这个就是我们要代理的真实对象
    private Object target;
    // 构造方法,给我们要代理的真实对象赋初值
    public Jdk_MyInvocationHandler(Object target) {
        this.target = target;
    }

    /*
     *invoke方法方法参数解析
     *Object proxy:指被代理的对象。
     *Method method:要调用的方法
     *Object[] args:方法调用时所需要的参数
     *InvocationHandler接口的子类可以看成代理的最终操作类。
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        System.out.println("开始进行代理的增强");
        Object result= null;
        try{
            // 利用反射动态的来反射方法,这就是动态代理和静态代理的区别
            result = method.invoke(target,args);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            System.out.println("代理的增强完毕了");
        }
        return result;
    }
}

 

 

6、TestJdk

package com.turtle.jdk;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class TestJdk {
    public static void main(String[] args) {

        // 我们要代理的真实对象
        Jdk_ProxyService jdkProxyService = new Jdk_ProxyServiceImpl();
        // 我们要代理哪个真实对象,就将该对象传进去
        InvocationHandler invocationHandler = new Jdk_MyInvocationHandler(jdkProxyService);

        /*
         *newProxyInstance方法参数解析
         *ClassLoader loader:类加载器
         *Class<?>[] interfaces:得到全部的接口
         *InvocationHandler h:得到InvocationHandler接口的子类实例
         */
        Jdk_ProxyService jdkProxyServiceProxy = (Jdk_ProxyService)Proxy.newProxyInstance(jdkProxyService.getClass().getClassLoader(),jdkProxyService.getClass().getInterfaces(),invocationHandler);

        //jdkProxyServiceProxy.doFind();
        // jdkProxyServiceProxy.doSave("测试");
        jdkProxyServiceProxy.doUpdate();

    }
}

 

二、使用CgliB来完成动态代理

1、概述:

        使用CGLib实现动态代理,完全不受代理类必须实现接口的限制,而且CGLib底层采用ASM字节码生成框架,使用字节码技术生成代理类,比使用Java反射效率要高。唯一需要注意的是,CGLib不能对声明为final的方法进行代理,因为CGLib原理是动态生成被代理类的子类。

2、代码结构、Jar包:

                                                                               

 

3、Cglib_ProxyService,被代理对象

package com.turtle.cglib;

public class Cglib_ProxyService {

    /**
     * 该方法不能被子类覆盖,Cglib是无法代理final修饰的方法的
     */
    public final void doDel(){
        System.out.println("正在进行删除操作");
    }

    /**
     * 有返回值、无参数
     * @return
     */
    public String doFind(){
        System.out.println("正在进行查询操作");
        return "SUCCESS";
    }

    /**
     * 有参数、有返回值
     * @param name
     * @return
     */
    public String doSave(String name){
        System.out.println("正在进行保存操作"+name);
        return "SUCCESS";
    }

    /**
     * 无参数、无返回值
     */
    public void doUpdate(){
        System.out.println("正在进行修改操作");
    }
}

 

4、Cglib_MyMethodInterceptor,我们自定义的代理,对对象做增强操作

package com.turtle.cglib;

import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 * 自己建立的AOP注入
 */
public class Cglib_MyMethodInterceptor implements MethodInterceptor {

    /**
     * @param o cglib生成的代理对象
     * @param method 被代理对象方法
     * @param objects 方法入参
     * @param methodProxy 代理方法
     * @return
     * @throws Throwable
     */
    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        String result = null;
        // 通过方法签名来确定我们需要对哪些方法做增强操作
        if(methodProxy.getSignature().getName() == "doUpdate"){
            System.out.println("对doUpdate方法做前置增强");
            methodProxy.invokeSuper(o,objects);
            System.out.println("对doUpdate方法做后置增强");
        }
        if(methodProxy.getSignature().getName() == "doSave"){
            System.out.println("对doSave方法做前置增强");
            methodProxy.invokeSuper(o,objects);
            System.out.println("对doSave方法做后置增强");
        }
        if(methodProxy.getSignature().getName() == "doDel"){
            System.out.println("对doDel方法做前置增强");
            methodProxy.invokeSuper(o,objects);
            System.out.println("对doDel方法做后置增强");
        }
        if(methodProxy.getSignature().getName() == "doFind"){
            System.out.println("对doFind方法做前置增强");
            result = methodProxy.invokeSuper(o,objects).toString();
            System.out.println("对doFind方法做后置增强");
        }
        return result;
    }
}

 

5、Cglib_ProxyFactory,创建一个工厂来实例化我们的代理。

package com.turtle.cglib;

import net.sf.cglib.proxy.Enhancer;

/**
 * 将用来创建代理对象的操作放到简单工厂里面来实现
 */
public class Cglib_ProxyFactory<T> {

    public T createProxyObj(T obj){
        // 通过CGLIB动态代理获取代理对象的过程
        Enhancer enhancer = new Enhancer();
        // 设置enhancer对象的父类
        enhancer.setSuperclass(obj.getClass());
        // 设置enhancer的回调对象
        enhancer.setCallback(new Cglib_MyMethodInterceptor());
        // 创建代理对象
        return (T)enhancer.create();
    }
}

 

6、TestCglib,测试结果。

package com.turtle.cglib;

public class TestCglib {
    public static void main(String[] args) {
        // 取得工厂对象
        Cglib_ProxyFactory<Cglib_ProxyService> cglibProxyFactory = new Cglib_ProxyFactory<>();
        // 利用工厂来创建代理对象
        Cglib_ProxyService cglibProxyService = cglibProxyFactory.createProxyObj(new Cglib_ProxyService());

        // 通过代理对象调用目标方法

        // 无参数、无返回值的方法
        // cglibProxyService.doUpdate();

        // 有参数的方法
        // cglibProxyService.doSave("保存");

        // 有返回值的方法
        // String result = cglibProxyService.doFind();
        // System.out.println(result);

        // 被final修饰的方法
        cglibProxyService.doDel();
    }
}

 

三、总结

 

分类:

技术点:

相关文章:

  • 2021-09-24
  • 2019-11-08
  • 2018-02-24
  • 2022-01-03
  • 2019-09-10
  • 2020-03-16
  • 2018-05-14
猜你喜欢
  • 2020-11-10
  • 2021-12-29
  • 2021-12-03
  • 2022-01-20
相关资源
相似解决方案