极光推送指定用户推送_干货|SpringBoot集成极光推送完整实现代码(建议收藏)...

工作中经常会遇到服务器向App推送消息的需求,一般企业中选择用极光推送的比较多,在集成极光时发现极光的文档并不完整,网上的文章也很多不能直接使用,这里列出我在工作中集成极光的全部代码,只需要按照如下代码保证一次性实现。

17de46ee8f7e43a3eff92deee9b4a96e.png

1.pom.xml

cn.jpush.api    jpush-client    3.3.10cn.jpush.api    jiguang-common    1.1.4

2.application.yml

jpush:  appKey: xxx  masterSecret: xxxx  apnsProduction: false   # 是否生成环境,true表示生成环境

3.MyJPushClient

import cn.jiguang.common.resp.APIConnectionException;import cn.jiguang.common.resp.APIRequestException;import cn.jpush.api.JPushClient;import cn.jpush.api.push.PushResult;import cn.jpush.api.push.model.Message;import cn.jpush.api.push.model.Options;import cn.jpush.api.push.model.Platform;import cn.jpush.api.push.model.PushPayload;import cn.jpush.api.push.model.audience.Audience;import cn.jpush.api.push.model.notification.AndroidNotification;import cn.jpush.api.push.model.notification.IosNotification;import cn.jpush.api.push.model.notification.Notification;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;import java.util.List;/** * 极光推送客户端 * * @author Mengday Zhang * @version 1.0 * @since 2019-04-01 */@Componentpublic class MyJPushClient {    @Value("${jpush.appKey}")    private String appKey;    @Value("${jpush.masterSecret}")    private String masterSecret;    @Value("${jpush.apnsProduction}")    private boolean apnsProduction;    private static JPushClient jPushClient = null;    private static final int RESPONSE_OK = 200;    private static final Logger logger = LoggerFactory.getLogger(MyJPushClient.class);    public JPushClient getJPushClient() {        if (jPushClient == null) {            jPushClient = new JPushClient(masterSecret, appKey);        }        return jPushClient;    }    /**     * 推送到alias列表     *     * @param alias             别名或别名组     * @param notificationTitle 通知内容标题     * @param msgTitle          消息内容标题     * @param msgContent        消息内容     * @param extras            扩展字段     */    public void sendToAliasList(List alias, String notificationTitle, String msgTitle, String msgContent, String extras) {        PushPayload pushPayload = buildPushObject_all_aliasList_alertWithTitle(alias, notificationTitle, msgTitle, msgContent, extras);        this.sendPush(pushPayload);    }    /**     * 推送到tag列表     *     * @param tagsList          Tag或Tag组     * @param notificationTitle 通知内容标题     * @param msgTitle          消息内容标题     * @param msgContent        消息内容     * @param extras            扩展字段     */    public void sendToTagsList(List tagsList, String notificationTitle, String msgTitle, String msgContent, String extras) {        PushPayload pushPayload = buildPushObject_all_tagList_alertWithTitle(tagsList, notificationTitle, msgTitle, msgContent, extras);        this.sendPush(pushPayload);    }    /**     * 发送给所有安卓用户     *     * @param notificationTitle 通知内容标题     * @param msgTitle          消息内容标题     * @param msgContent        消息内容     * @param extras        扩展字段     */    public void sendToAllAndroid(String notificationTitle, String msgTitle, String msgContent, String extras) {        PushPayload pushPayload = buildPushObject_android_all_alertWithTitle(notificationTitle, msgTitle, msgContent, extras);        this.sendPush(pushPayload);    }    /**     * 发送给所有IOS用户     *     * @param notificationTitle 通知内容标题     * @param msgTitle          消息内容标题     * @param msgContent        消息内容     * @param extras        扩展字段     */    public void sendToAllIOS(String notificationTitle, String msgTitle, String msgContent, String extras) {        PushPayload pushPayload = buildPushObject_ios_all_alertWithTitle(notificationTitle, msgTitle, msgContent, extras);        this.sendPush(pushPayload);    }    /**     * 发送给所有用户     *     * @param notificationTitle 通知内容标题     * @param msgTitle          消息内容标题     * @param msgContent        消息内容     * @param extras        扩展字段     */    public void sendToAll(String notificationTitle, String msgTitle, String msgContent, String extras) {        PushPayload pushPayload = buildPushObject_android_and_ios(notificationTitle, msgTitle, msgContent, extras);        this.sendPush(pushPayload);    }    private PushResult sendPush(PushPayload pushPayload) {        logger.info("pushPayload={}", pushPayload);        PushResult pushResult = null;        try {            pushResult = this.getJPushClient().sendPush(pushPayload);            logger.info("" + pushResult);            if (pushResult.getResponseCode() == RESPONSE_OK) {                logger.info("push successful, pushPayload={}", pushPayload);            }        } catch (APIConnectionException e) {            logger.error("push failed: pushPayload={}, exception={}", pushPayload, e);        } catch (APIRequestException e) {            logger.error("push failed: pushPayload={}, exception={}", pushPayload, e);        }        return pushResult;    }    /**     * 向所有平台所有用户推送消息     *     * @param notificationTitle     * @param msgTitle     * @param msgContent     * @param extras     * @return     */    public PushPayload buildPushObject_android_and_ios(String notificationTitle, String msgTitle, String msgContent, String extras) {        return PushPayload.newBuilder()                .setPlatform(Platform.android_ios())                .setAudience(Audience.all())                .setNotification(Notification.newBuilder()                        .setAlert(notificationTitle)                        .addPlatformNotification(AndroidNotification.newBuilder()                                .setAlert(notificationTitle)                                .setTitle(notificationTitle)                                // 此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)                                .addExtra("androidNotification extras key", extras)                                .build()                        )                        .addPlatformNotification(IosNotification.newBuilder()                                // 传一个IosAlert对象,指定apns title、title、subtitle等                                .setAlert(notificationTitle)                                // 直接传alert                                // 此项是指定此推送的badge自动加1                                .incrBadge(1)                                // 此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,                                // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音                                .setSound("default")                                // 此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)                                .addExtra("iosNotification extras key", extras)                                // 此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification                                // .setContentAvailable(true)                                .build()                        )                        .build()                )                // Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,                // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的                // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别                .setMessage(Message.newBuilder()                        .setMsgContent(msgContent)                        .setTitle(msgTitle)                        .addExtra("message extras key", extras)                        .build())                .setOptions(Options.newBuilder()                        // 此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义                        .setApnsProduction(apnsProduction)                        // 此字段是给开发者自己给推送编号,方便推送者分辨推送记录                        .setSendno(1)                        // 此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒                        .setTimeToLive(86400)                        .build())                .build();    }    /**     * 向所有平台单个或多个指定别名用户推送消息     *     * @param aliasList     * @param notificationTitle     * @param msgTitle     * @param msgContent     * @param extras     * @return     */    private PushPayload buildPushObject_all_aliasList_alertWithTitle(List aliasList, String notificationTitle, String msgTitle, String msgContent, String extras) {        // 创建一个IosAlert对象,可指定APNs的alert、title等字段        // IosAlert iosAlert =  IosAlert.newBuilder().setTitleAndBody("title", "alert body").build();        return PushPayload.newBuilder()                // 指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台                .setPlatform(Platform.all())                // 指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id                .setAudience(Audience.alias(aliasList))                // jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发                .setNotification(Notification.newBuilder()                        // 指定当前推送的android通知                        .addPlatformNotification(AndroidNotification.newBuilder()                                .setAlert(notificationTitle)                                .setTitle(notificationTitle)                                // 此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)                                .addExtra("androidNotification extras key", extras)                                .build())                        // 指定当前推送的iOS通知                        .addPlatformNotification(IosNotification.newBuilder()                                // 传一个IosAlert对象,指定apns title、title、subtitle等                                .setAlert(notificationTitle)                                // 直接传alert                                // 此项是指定此推送的badge自动加1                                .incrBadge(1)                                // 此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,                                // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音                                .setSound("default")                                // 此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)                                .addExtra("iosNotification extras key", extras)                                // 此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification                                // 取消此注释,消息推送时ios将无法在锁屏情况接收                                // .setContentAvailable(true)                                .build())                        .build())                // Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,                // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的                // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别                .setMessage(Message.newBuilder()                        .setMsgContent(msgContent)                        .setTitle(msgTitle)                        .addExtra("message extras key", extras)                        .build())                .setOptions(Options.newBuilder()                        // 此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义                        .setApnsProduction(apnsProduction)                        // 此字段是给开发者自己给推送编号,方便推送者分辨推送记录                        .setSendno(1)                        // 此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天;                        .setTimeToLive(86400)                        .build())                .build();    }    /**     * 向所有平台单个或多个指定Tag用户推送消息     *     * @param tagsList     * @param notificationTitle     * @param msgTitle     * @param msgContent     * @param extras     * @return     */    private PushPayload buildPushObject_all_tagList_alertWithTitle(List tagsList, String notificationTitle, String msgTitle, String msgContent, String extras) {        //创建一个IosAlert对象,可指定APNs的alert、title等字段        //IosAlert iosAlert =  IosAlert.newBuilder().setTitleAndBody("title", "alert body").build();        return PushPayload.newBuilder()                // 指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台                .setPlatform(Platform.all())                // 指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id                .setAudience(Audience.tag(tagsList))                // jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发                .setNotification(Notification.newBuilder()                        // 指定当前推送的android通知                        .addPlatformNotification(AndroidNotification.newBuilder()                                .setAlert(notificationTitle)                                .setTitle(notificationTitle)                                //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)                                .addExtra("androidNotification extras key", extras)                                .build())                        // 指定当前推送的iOS通知                        .addPlatformNotification(IosNotification.newBuilder()                                // 传一个IosAlert对象,指定apns title、title、subtitle等                                .setAlert(notificationTitle)                                // 直接传alert                                // 此项是指定此推送的badge自动加1                                .incrBadge(1)                                // 此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,                                // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音                                .setSound("default")                                // 此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)                                .addExtra("iosNotification extras key", extras)                                // 此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification                                // 取消此注释,消息推送时ios将无法在锁屏情况接收                                // .setContentAvailable(true)                                .build())                        .build())                // Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,                // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的                // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别                .setMessage(Message.newBuilder()                        .setMsgContent(msgContent)                        .setTitle(msgTitle)                        .addExtra("message extras key", extras)                        .build())                .setOptions(Options.newBuilder()                        // 此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义                        .setApnsProduction(apnsProduction)                        // 此字段是给开发者自己给推送编号,方便推送者分辨推送记录                        .setSendno(1)                        // 此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天;                        .setTimeToLive(86400)                        .build())                .build();    }    /**     * 向android平台所有用户推送消息     *     * @param notificationTitle     * @param msgTitle     * @param msgContent     * @param extras     * @return     */    private PushPayload buildPushObject_android_all_alertWithTitle(String notificationTitle, String msgTitle, String msgContent, String extras) {        return PushPayload.newBuilder()                // 指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台                .setPlatform(Platform.android())                // 指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id                .setAudience(Audience.all())                // jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发                .setNotification(Notification.newBuilder()                        // 指定当前推送的android通知                        .addPlatformNotification(AndroidNotification.newBuilder()                                .setAlert(notificationTitle)                                .setTitle(notificationTitle)                                // 此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)                                .addExtra("androidNotification extras key", extras)                                .build())                        .build()                )                // Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,                // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的                // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别                .setMessage(Message.newBuilder()                        .setMsgContent(msgContent)                        .setTitle(msgTitle)                        .addExtra("message extras key", extras)                        .build())                .setOptions(Options.newBuilder()                        // 此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义                        .setApnsProduction(apnsProduction)                        // 此字段是给开发者自己给推送编号,方便推送者分辨推送记录                        .setSendno(1)                        // 此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒                        .setTimeToLive(86400)                        .build())                .build();    }    /**     * 向ios平台所有用户推送消息     *     * @param notificationTitle     * @param msgTitle     * @param msgContent     * @param extras     * @return     */    private PushPayload buildPushObject_ios_all_alertWithTitle(String notificationTitle, String msgTitle, String msgContent, String extras) {        return PushPayload.newBuilder()                // 指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台                .setPlatform(Platform.ios())                // 指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id                .setAudience(Audience.all())                // jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发                .setNotification(Notification.newBuilder()                        // 指定当前推送的android通知                        .addPlatformNotification(IosNotification.newBuilder()                                // 传一个IosAlert对象,指定apns title、title、subtitle等                                .setAlert(notificationTitle)                                // 直接传alert                                // 此项是指定此推送的badge自动加1                                .incrBadge(1)                                // 此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,                                // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音                                .setSound("default")                                // 此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)                                .addExtra("iosNotification extras key", extras)                                // 此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification                                // .setContentAvailable(true)                                .build())                        .build()                )                // Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,                // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的                // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别                .setMessage(Message.newBuilder()                        .setMsgContent(msgContent)                        .setTitle(msgTitle)                        .addExtra("message extras key", extras)                        .build())                .setOptions(Options.newBuilder()                        // 此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义                        .setApnsProduction(apnsProduction)                        // 此字段是给开发者自己给推送编号,方便推送者分辨推送记录                        .setSendno(1)                        // 此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒                        .setTimeToLive(86400)                        .build())                .build();    }    public static void main(String[] args) {//        MyJPushClient jPushUtil = new MyJPushClient();//        List aliasList = Arrays.asList("239");//        String notificationTitle = "notificationTitle";//        String msgTitle = "msgTitle";//        String msgContent = "msgContent";//        jPushUtil.sendToAliasList(aliasList, notificationTitle, msgTitle, msgContent, "exts");    }}

4.test

@RunWith(SpringRunner.class)@SpringBootTestpublic class JPushApplicationTests {    @Autowired    private MyJPushClient jPushClient;    @Test    public void testJPush() {        List aliasList = Arrays.asList("239");        String notificationTitle = "notification_title";        String msgTitle = "msg_title";        String msgContent = "msg_content";        jPushClient.sendToAliasList(aliasList, notificationTitle, msgTitle, msgContent, "exts");    }}
3e0ca34c7e58c0744a8ff885e63d636a.png

获取示例源码请转发该文章并关注Java实用技术,私信获取极光推送源码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Babylon-AST初探-代码更新删除(Update Remove)

通过前两篇文章的介绍,大家已经了解了Create和Retrieve,我们接着介绍Update和 Remove操作。Update操作通常配合Create来完成。我们这篇文章主要介绍几个常用的NodePathAPI:replace、insert、remove。具体也可以看babel-handbook中的Manipulat…

编解码异常分析

前言 最近在做的项目,有H264解码的需求。部分H264文件解码播放后,显示为绿屏或者花屏。 分析 如何确认是否是高通硬解码的问题 adb 指令 adb root adb remount adb shell setenforce 0 adb shell setprop vendor.gralloc.disable_ubwc 1 adb shell c…

js根据name获取value_js 函数的重载

js 函数的重载我们知道,很多编程语言都有函数的重载。所谓的重载,看定义:重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间&#xff…

存储过程循环遍历一个月的每一天的函数_JavaScript 循环:如何处理 async/await

同步循环很久以前我写的循环是这样的:后来 JavaScript 提供了很多新的特性,现在我们会更倾向于用下面这种写法:在开发过程可能会有这么一种需求,我们需要在循环中异步处理 item,那么可以怎么做呢?异步循环如…

Angular程序架构

component,组件是Angular应用的基本构建块,你可以把一个组件理解为一段带有业务逻辑和数据的html。组件下面可以有子组件,子组件下有孙子组件,像树一样。指令:允许你向html元素添加自定义行为。模块Ngmodule&#xff1…

易语言python1.1模块_易语言之编写模块与引入模块

本人并不精通易语言,只是对其进行一定了解后做一个简单的总结。直接新建一个易语言模块,然后添加子程序即可。子程序当然可以随意命名,实际上,易语言的子程序就和c语言的函数,java中的方法一样(实际上,java…

spring boot开发笔记——mybatis

概述 mybatis框架的优点,就不用多说了,今天这边干货主要讲mybatis的逆向工程,以及springboot的集成技巧,和分页的使用 因为在日常的开发中,当碰到特殊需求之类会手动写一下sql语句,大部分的时候完全可以用m…

Angular项目目录介绍

通过 ng new 项目名生成的项目 一级目录 Angular cli 工具生成的目录文件名不要随意修改,要不然会影响工具的使用。e2e:端到端的测试目录,用来做自动测试的。node_modules:Angular第三方包。src:应用源代码目录&#…

jvm内存模型_四种视角看JVM内存模型

1.JVM运行视角程序计数器Java虚拟机栈本地方法栈Java堆方法区1 .程序计数器程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的行号指示器。这个计数器记录的是正在执行的虚拟机字节码指令的地址。此内存区域是唯一一个在JAVA虚拟机规范中没有规定任何Ou…

Tomcat服务脚本

为什么80%的码农都做不了架构师?>>> #!/bin/bash ### BEGIN INIT INFO # Provides: tomcat # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # S…

oracle 取当前日期时间的前一天前一小时前一分钟前一秒

原文链接:http://wentao365.iteye.com/blog/779492 点击阅读原文 --------------------------------------------------------------------------- SELECT 当前时间 TITLE, TO_CHAR(SYSDATE, yyyy-mm-dd hh24:mi:ss) TIME FROM DUAL --当前时间 UNION ALL S…

mysql8事务级别_Mysql几种事务隔离级别

前言:之前对mysql的基础知识通过了几篇博客进行了一个详解,包括从数据库系统的原理以及最基本的操作使用,此篇博客将主要对mysql的事务级别进行实战分析1.什么是事务?事务是应用程序中一系列严密的操作,所有操作必须成…

控制台应用和空项目有什么区别_互联网小程序的应用以及APP的应用有什么区别及发展...

随时移动互联网进入的千家万户,互联网的手机应用程序也渐渐的在市场上流行起来了。今天主要跟大家谈一下互联网小程序的应用以及APP的应用有什么区别以及未来的发展趋。未来会流行什么手机应用或者APP应用,我带大家都为了解一下。下边先来了解一下小程序…

day19_java基础加强_动态代理+注解+类加载器

一、动态代理 1.1、代理模式 什么是代理模式及其作用? Proxy Pattern(即:代理模式),23种常用的面向对象软件的设计模式之一。        代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。 …

使用循环链表实现一个通讯录的管理程序_【LeetCode链表题型总结】

点击上方蓝字,关注公众号链表概念的讲解链表是什么链表是一种线性数据结构,每个节点都存有数据,通过指针将各个节点链接在一起。链表的性质一致性: 每个节点有相同的数据结构,相同的数据大小,内存中占据相同的大小&…

python的kite下载安装及使用_Kite下载|Kite Python编程工具 V1.2020.1203.0 最新版下载 - 下载银行...

Kite是一款专为Python打造的一款代码补全软件,如果你正在学习Python或是从事与Python相关的编程工作,那么这款软件绝对是你的好帮手!其会智能判断用户想要输入的每个代码字段,并在所有库中进行匹配相应的内容,如果看到…

Linux 升级 Python 至 3.x

原文链接:http://blog.csdn.net/liang19890820/article/details/51079633 -------------------------------------------- 简述 CentOS 7 中默认安装了 Python,版本比较低(2.7.5),为了使用新版 3.x,需要对…

Sublime Text 3 配置python交互运行环境的快捷键

2019独角兽企业重金招聘Python工程师标准>>> 使用Sublime Text 3能以轻量级的环境写python脚本,运行python代码。为了更加方便地调用python脚本,通过在Sublime Text 3中绑定快捷键的方式,实现一键调用python交互运行环境&#xff…

xftp如何搜索文件_头条搜索站长平台如何添加网站和sitemap文件?附图文教程

头条搜索站长平台已经上线了,目前我们广大站长都可以登录该平台后添加新网站和提交 sitemap 地图文件,建议大家可以前往尝试一下,多一个搜索平台就多一条路,认为倒是挺好的。下面就跟大家简单介绍头条搜索站长平台如何添加网站和提…

彩铅练习,花船

图片发自简书App图片发自简书App