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] => Spring中使用AOP三种方式
                        )

                )

        )

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

                )

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

    [size] => 8
    [from] => 0
)
RESPONSE:
string(7590) "{"took":46,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":10000,"relation":"gte"},"max_score":37.25674,"hits":[{"_index":"likecs_art_db","_type":"_doc","_id":"37993","_score":37.25674,"_source":{"id":"37993","text":"Spring\u4e2d\u4f7f\u7528AOP\u4e09\u79cd\u65b9\u5f0f","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":"tojian","tagsname":"spring","tagsid":"[\"696\"]","catesname":"","catesid":"[]","createtime":"1540739626"},"highlight":{"text":["#em#Spring#/em##em#中#/em##em#使#/em##em#用#/em##em#AOP#/em##em#三#/em##em#种#/em##em#方#/em##em#式#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"908047","_score":24.682919,"_source":{"id":"908047","text":"Spring-Aop\u7684\u4e24\u79cd\u4ee3\u7406\u65b9\u5f0f","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":"YpfBolg","tagsname":null,"tagsid":"","catesname":"","catesid":"","createtime":"1638516548"},"highlight":{"text":["#em#Spring#/em#-#em#Aop#/em#的两#em#种#/em#代理#em#方#/em##em#式#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"89056","_score":23.700813,"_source":{"id":"89056","text":"spring boot \u4e2dAOP\u7684\u4f7f\u7528","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":"longronglang","tagsname":"","tagsid":"[]","catesname":"","catesid":"[]","createtime":"1578407726"},"highlight":{"text":["#em#spring#/em# boot #em#中#/em##em#AOP#/em#的#em#使#/em##em#用#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"5361","_score":23.103867,"_source":{"id":"5361","text":"AOP\u53caspring AOP\u7684\u4f7f\u7528","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":"wangsen","tagsname":"aop","tagsid":"[3537]","catesname":"","catesid":"[]","createtime":"1516187436"},"highlight":{"text":["#em#AOP#/em#及#em#spring#/em# #em#AOP#/em#的#em#使#/em##em#用#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"203523036","_score":22.70066,"_source":{"id":"203523036","text":"Spring AOP(\u4e09)-AOP\u7684Advisor","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":"1638300019"},"highlight":{"text":["#em#Spring#/em# #em#AOP#/em#(#em#三#/em#)-#em#AOP#/em#的Advisor"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"743794","_score":22.524096,"_source":{"id":"743794","text":"Spring AOP\u53ca\u4e8b\u52a1\u914d\u7f6e\u4e09\u79cd\u6a21\u5f0f\u8be6\u89e3","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":"javammc","tagsname":"","tagsid":"[]","catesname":"\u62c9\u52fe\u8bad\u7ec3\u8425","catesid":"[\"12395\"]","createtime":"1637157996"},"highlight":{"text":["#em#Spring#/em# #em#AOP#/em#及事务配置#em#三#/em##em#种#/em#模#em#式#/em#详解"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"203285196","_score":22.392586,"_source":{"id":"203285196","text":"\u6b7b\u78d5Spring AOP\u7cfb\u52175\uff1a\u8bbe\u8ba1\u6a21\u5f0f\u5728AOP\u4e2d\u7684\u4f7f\u7528","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":"1621544092"},"highlight":{"text":["死磕#em#Spring#/em# #em#AOP#/em#系列5:设计模#em#式#/em#在#em#AOP#/em##em#中#/em#的#em#使#/em##em#用#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"203445312","_score":22.21686,"_source":{"id":"203445312","text":"Spring\u7cfb\u5217\u4e4bAOP\u5b9e\u73b0\u7684\u4e24\u79cd\u65b9\u5f0f","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":"1628214763"},"highlight":{"text":["#em#Spring#/em#系列之#em#AOP#/em#实现的两#em#种#/em##em#方#/em##em#式#/em#"]}}]}}"
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] => Spring中使用AOP三种方式
                        )

                )

        )

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

                )

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

    [size] => 8
    [from] => 8
)
RESPONSE:
string(7908) "{"took":56,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":10000,"relation":"gte"},"max_score":37.25674,"hits":[{"_index":"likecs_art_db","_type":"_doc","_id":"17258","_score":22.046005,"_source":{"id":"17258","text":"MVC-AOP\u601d\u60f3-Filter \u4e09\u79cd\u6ce8\u518c\u65b9\u5f0f","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":"Godlovezk","tagsname":"","tagsid":"[]","catesname":".NET","catesid":"[\"119\"]","createtime":"1525828418"},"highlight":{"text":["MVC-#em#AOP#/em#思想-Filter #em#三#/em##em#种#/em#注册#em#方#/em##em#式#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"24644","_score":21.94696,"_source":{"id":"24644","text":"spring\u4e2d\u57fa\u4e8e\u6ce8\u89e3\u4f7f\u7528AOP","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":"hello-daocaoren","tagsname":"spring|springAOP|\u6ce8\u89e3AOP|springBoot","tagsid":"[\"696\",\"7452\",11443,\"168\"]","catesname":"\u6846\u67b6\u5e94\u7528","catesid":"[3830]","createtime":"1531209527"},"highlight":{"text":["#em#spring#/em##em#中#/em#基于注解#em#使#/em##em#用#/em##em#AOP#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"88373","_score":21.886421,"_source":{"id":"88373","text":"spring\u6ce8\u89e3\u4e4b@Import\u6ce8\u89e3\u7684\u4e09\u79cd\u4f7f\u7528\u65b9\u5f0f","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":"yichunguo","tagsname":"","tagsid":"[]","catesname":"","catesid":"[]","createtime":"1578017594"},"highlight":{"text":["#em#spring#/em#注解之@Import注解的#em#三#/em##em#种#/em##em#使#/em##em#用#/em##em#方#/em##em#式#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"203493794","_score":21.771757,"_source":{"id":"203493794","text":"Spring\u5b66\u4e60\uff08\u4e09\uff09| Spring AOP","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":"1617370642"},"highlight":{"text":["#em#Spring#/em#学习(#em#三#/em#)| #em#Spring#/em# #em#AOP#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"203396836","_score":21.563848,"_source":{"id":"203396836","text":"Spring \u4f7f\u7528 AspectJ \u8fdb\u884c AOP \u7684\u5f00\u53d1\uff1aXML \u7684\u65b9\u5f0f","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":"1625314169"},"highlight":{"text":["#em#Spring#/em# #em#使#/em##em#用#/em# AspectJ 进行 #em#AOP#/em# 的开发:XML 的#em#方#/em##em#式#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"203396831","_score":21.431374,"_source":{"id":"203396831","text":"spring 4.0 AOP (\u4f7f\u7528AspectJ\u7684\u6ce8\u89e3\u65b9\u5f0f \u7684aop\u5b9e\u73b0)\u7b80\u5355\u5b9e\u4f8b","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":"1622226365"},"highlight":{"text":["#em#spring#/em# 4.0 #em#AOP#/em# (#em#使#/em##em#用#/em#AspectJ的注解#em#方#/em##em#式#/em# 的#em#aop#/em#实现)简单实例"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"203396832","_score":21.431374,"_source":{"id":"203396832","text":"spring 4.0 AOP (\u4f7f\u7528AspectJ\u7684\u6ce8\u89e3\u65b9\u5f0f \u7684aop\u5b9e\u73b0)\u7b80\u5355\u5b9e\u4f8b","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":"1617133020"},"highlight":{"text":["#em#spring#/em# 4.0 #em#AOP#/em# (#em#使#/em##em#用#/em#AspectJ的注解#em#方#/em##em#式#/em# 的#em#aop#/em#实现)简单实例"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"809801","_score":21.38881,"_source":{"id":"809801","text":"spring\u6709\u4e09\u79cd\u542f\u52a8\u65b9\u5f0f","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":"kongxc","tagsname":"","tagsid":"","catesname":"","catesid":"","createtime":"1637206711"},"highlight":{"text":["#em#spring#/em#有#em#三#/em##em#种#/em#启动#em#方#/em##em#式#/em#"]}}]}}"
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] => Spring中使用AOP三种方式
                        )

                )

        )

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

                )

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

    [from] => 0
)
RESPONSE:
bool(false)
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] => Spring中使用AOP三种方式
                                                )

                                        )

                                )

                        )

                    [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(3097) "{"took":12,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":10000,"relation":"gte"},"max_score":25.710503,"hits":[{"_index":"likecs_down_db","_type":"_doc","_id":"70952","_score":25.710503,"_source":{"id":"70952","title":"\u4f7f\u7528C#\u521b\u5efawebservice\u53ca\u4e09\u79cd\u8c03\u7528\u65b9\u5f0f \u4e2d\u6587WORD\u7248","spidertime":"1623126448","contenttime":"1674337455","pageimage":"https:\/\/img.jbzj.com\/do\/uploads\/litimg\/161104\/1103545a4R.png","tag":"c#|WebService|\u8c03\u7528\u65b9\u5f0f|\u4e09\u79cd\u65b9\u5f0f","cate1":"\u7535\u5b50\u4e66\u7c4d","cate2":"\u7f16\u7a0b\u5f00\u53d1","cate3":"C\/C++\/C#","attr1":"17.9KB"},"highlight":{"title":["#em#使#/em##em#用#/em#C#创建webservice及#em#三#/em##em#种#/em#调#em#用#/em##em#方#/em##em#式#/em# #em#中#/em#文WORD版"]}},{"_index":"likecs_down_db","_type":"_doc","_id":"35896","_score":25.710503,"_source":{"id":"35896","title":"\u4f7f\u7528C#\u521b\u5efawebservice\u53ca\u4e09\u79cd\u8c03\u7528\u65b9\u5f0f \u4e2d\u6587WORD\u7248","spidertime":"1622960921","contenttime":"1672503078","pageimage":"https:\/\/img.jbzj.com\/do\/uploads\/litimg\/161104\/1103545a4R.png","tag":"c#|WebService|\u8c03\u7528\u65b9\u5f0f|\u4e09\u79cd\u65b9\u5f0f","cate1":"\u7535\u5b50\u4e66\u7c4d","cate2":"\u7f16\u7a0b\u5f00\u53d1","cate3":"C\/C++\/C#","attr1":"17.9KB"},"highlight":{"title":["#em#使#/em##em#用#/em#C#创建webservice及#em#三#/em##em#种#/em#调#em#用#/em##em#方#/em##em#式#/em# #em#中#/em#文WORD版"]}},{"_index":"likecs_down_db","_type":"_doc","_id":"70150","_score":21.737322,"_source":{"id":"70150","title":"Spring\u4e2d\u4f7f\u7528Quartz WORD\u7248","spidertime":"1623125316","contenttime":"1625067577","pageimage":"https:\/\/img.jbzj.com\/do\/uploads\/litimg\/170418\/1103455c108.png","tag":"Spring|Quartz","cate1":"\u7535\u5b50\u4e66\u7c4d","cate2":"\u5176\u5b83\u76f8\u5173","attr1":"22.3KB"},"highlight":{"title":["#em#Spring#/em##em#中#/em##em#使#/em##em#用#/em#Quartz WORD版"]}},{"_index":"likecs_down_db","_type":"_doc","_id":"35034","_score":21.737322,"_source":{"id":"35034","title":"Spring\u4e2d\u4f7f\u7528Quartz WORD\u7248","spidertime":"1622959875","contenttime":"1676646931","pageimage":"https:\/\/img.jbzj.com\/do\/uploads\/litimg\/170418\/1103455c108.png","tag":"Spring|Quartz","cate1":"\u7535\u5b50\u4e66\u7c4d","cate2":"\u5176\u5b83\u76f8\u5173","attr1":"22.3KB"},"highlight":{"title":["#em#Spring#/em##em#中#/em##em#使#/em##em#用#/em#Quartz WORD版"]}},{"_index":"likecs_down_db","_type":"_doc","_id":"71366","_score":17.882202,"_source":{"id":"71366","title":"\u4f7f\u7528Spring+CXF\u5f00\u53d1WebService \u4e2d\u6587WORD\u7248","spidertime":"1623126936","contenttime":"1670962997","pageimage":"https:\/\/img.jbzj.com\/do\/uploads\/litimg\/161222\/0SP2596151.png","tag":"Spring|CXF|WebService","cate1":"\u7535\u5b50\u4e66\u7c4d","cate2":"\u7f16\u7a0b\u5f00\u53d1","cate3":"\u7f16\u7a0b\u5176\u5b83","attr1":"15.8KB"},"highlight":{"title":["#em#使#/em##em#用#/em##em#Spring#/em#+CXF开发WebService #em#中#/em#文WORD版"]}}]}}"
Spring中使用AOP三种方式 - 爱码网
tojian

title:Spring中使用AOP三种方式
date: 2018-10-29 22:32:01
tags: spring
author :辰砂tj


第一种实现的方式:通过Spring的API实现AOP。

第一步:

public interface UserService {
public void add();
public void update(int a);
public void delete();
public void search();
}

第二步:

public class UserServiceImpl implements UserService {
@Override
public void add() {
System.out.println("增加用户");
}
@Override
public void update(int a) {
System.out.println("修改用户");
}
@Override
public void delete() {
System.out.println("删除用户");
}
@Override
public void search() {
System.out.println("查询用户");
}

第三步:实现MethodBeforeAdvice的接口,Spring框架当中为我们提供了很多中通知。

public class Log implements MethodBeforeAdvice{
/**
* @param method 被调用方法对象
* @param args 被调用的方法的参数
* @param target 被调用的方法的目标对象
* */
@Override
public void before(Method method, Object[] args, Object target)
throws Throwable {
System.out.println(target.getClass().getName()+"的"+method.getName()+"方法被执行");
}
}

第四步:配置beans.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="userService" class="com.spring.service.impl.UserServiceImpl"/>
<!-- 这个切面也要配置成bean-->
<bean id="log" class="com.spring.advice.Log"/>
<aop:config>
<!--切入点,需要告诉方法在什么去执行
expression="execution(* com.spring.service.impl.*.*(..))"
第一个* 表示所有的返回值,然后就是包名
第二个*表示所有的类对象
第三个*表示类对象所有的方法
第四个*表示所有方法下面的带参数的方法或者是不带参数的方法
-->
<aop:pointcut expression="execution(* com.spring.service.impl.*.*(..))" id="pointcut"/>
<!-- 在所有的方法中都切入前置通知-->
<aop:advisor advice-ref="log" pointcut-ref="pointcut"/>
</aop:config>
</beans>

第五步:测试:

package com.spring.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.spring.service.UserService;
public class Test {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
UserService userService = (UserService)ac.getBean("userService");
userService.update(2);
userService.add();
}
}

运行结果:

三月 12, 2017 2:22:44 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@439f5b3d: startup date [Sun Mar 12 14:22:44 GMT+08:00 2017]; root of context hierarchy
三月 12, 2017 2:22:44 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [beans.xml]
com.spring.service.impl.UserServiceImpl的update方法被执行
修改用户
com.spring.service.impl.UserServiceImpl的add方法被执行
增加用户
故前置通知可以在spring当中被执行,接下可以完善通知;
public class AfterLog implements AfterReturningAdvice{
/**
* 目标方法执行后执行的通知
* returnValue--返回值
* method 被调用的方法对象
* args 被调用的方法对象的参数
* target 被调用的方法对象的目标对象
* */
@Override
public void afterReturning(Object returnValue, Method method,
Object[] args, Object target) throws Throwable {
System.out.println(target.getClass().getName()+"的"+method.getName()+"被成功执行,返回值是:"+returnValue);
}
}

import java.lang.reflect.Method;
import org.springframework.aop.ThrowsAdvice;
public class ExceptionLog implements ThrowsAdvice {
public void afterThrowing(Method method,Exception ex) throws Throwable {
}
}

重新配置:

<!-- 这个切面也要配置成bean-->
<bean id="log" class="com.spring.advice.Log"/>
<bean id="afterLog" class="com.spring.advice.AfterLog"></bean>
<aop:config>
<!--切入点,需要告诉方法在什么去执行
expression="execution(* com.spring.service.impl.*.*(..))"
第一个* 表示所有的返回值,然后就是包名
第二个*表示所有的类对象
第三个*表示类对象所有的方法
第四个*表示所有方法下面的带参数的方法或者是不带参数的方法
-->
<aop:pointcut expression="execution(* com.spring.service.impl.*.*(..))" id="pointcut"/>
<!-- 在所有的方法中都切入前置通知-->
<aop:advisor advice-ref="log" pointcut-ref="pointcut"/>
<aop:advisor advice-ref="afterLog" pointcut-ref="pointcut"/>
</aop:config>

测试运行结果:

三月 12, 2017 2:28:19 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@439f5b3d: startup date [Sun Mar 12 14:28:19 GMT+08:00 2017]; root of context hierarchy
三月 12, 2017 2:28:19 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [beans.xml]
com.spring.service.impl.UserServiceImpl的update方法被执行
修改用户
com.spring.service.impl.UserServiceImpl的update被成功执行,返回值是:null
com.spring.service.impl.UserServiceImpl的add方法被执行
增加用户
com.spring.service.impl.UserServiceImpl的add被成功执行,返回值是:null

总结:AOP的重要性,非常重要

Spring的AOP就是将公共的业务(如日志,安全等)和业务类结合。当执行业务的时候将会把公共业务加进来。实现公共业务的重复利用。我们自己的业务就会变得更加的纯粹,我们就可以关注我们的自己的业务,本质就是动态代理。

第二种方式:自定义类来实现AOP,不实现spring的自带的通知

第一步:重新通知:

public class Log {
public void before(){
System.out.println("方法执行前");
}
public void after(){
System.out.println("方法执行后");
}
}

第二步:重新写配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="userService" class="com.spring.service.impl.UserServiceImpl"/>
<!-- 这个切面也要配置成bean-->
<bean id="log" class="com.spring.advice.Log"/>
<aop:config>
<!--切入点,需要告诉方法在什么去执行
expression="execution(* com.spring.service.impl.*.*(..))"
第一个* 表示所有的返回值,然后就是包名
第二个*表示所有的类对象
第三个*表示类对象所有的方法
第四个*表示所有方法下面的带参数的方法或者是不带参数的方法
-->
<aop:aspect ref="log">
<aop:pointcut expression="execution(* com.spring.service.impl.*.*(..))" id="pointcut"/>
<aop:before method="before" pointcut-ref="pointcut"/>
<aop:after method="after" pointcut-ref="pointcut"/>
</aop:aspect>
</aop:config>
</beans>

第三种方式:通过注解实现AOP

第一步:修改log

package com.spring.advice;
import java.lang.reflect.Method;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.aop.MethodBeforeAdvice;
@Aspect
public class Log {
@Before("execution(* com.spring.service.impl.*.*(..))")
public void before(){
System.out.println("方法执行前");
}
@After("execution(* com.spring.service.impl.*.*(..))")
public void after(){
System.out.println("方法执行后");
}
@Around("execution(* com.spring.service.impl.*.*(..))")
public Object around(ProceedingJoinPoint jp) throws Throwable{
System.out.println("环绕前");
System.out.println("方法"+jp.getSignature());
Object result=jp.proceed();
System.out.println("环绕后");
return result;
}
}

第二步:修改beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="userService" class="com.spring.service.impl.UserServiceImpl"/>
<!-- 这个切面也要配置成bean-->
<bean id="log" class="com.spring.advice.Log"/>
<aop:aspectj-autoproxy/>
</beans>

第三步:运行:

三月 12, 2017 3:00:02 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@439f5b3d: startup date [Sun Mar 12 15:00:02 GMT+08:00 2017]; root of context hierarchy
三月 12, 2017 3:00:02 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [beans.xml]
环绕前
方法void com.spring.service.UserService.update(int)
方法执行前
修改用户
环绕后
方法执行后

分类:

技术点:

spring

相关文章:

  • 2018-05-09
  • 2018-07-10
  • 2020-01-03
  • 2021-04-02
  • 2021-07-03
  • 2021-05-29
  • 2021-11-18
猜你喜欢
  • 2021-12-03
  • 2020-01-07
  • 2018-01-17
  • 2021-12-01
  • 2021-11-17
  • 2021-05-21
  • 2021-08-06
相关资源
相似解决方案