- 9、Django Admin优化查询
背着吉他去流浪
DjangoAdminpython开发语言
如果你的Admin后台中有很多计算字段,那么你需要对每个对象运行多个查询,这会使你的Admin后台变得非常慢。要解决此问题,你可以重写管理模型中的get_queryset方法使用annotate聚合函数来计算相关的字段。以下示例为Origin模型的中ModelAdmin管理模型:@admin.register(Origin)classOriginAdmin(admin.ModelAdmin):
- 【matplotlib】可视化解决方案——如何正确使用文本注释
勇敢努力拼搏
概述注释是图形元素,通常是文本片段,用于解释、添加上下文或以其他方式突出显示可视化数据的某些部分。文本注释的展示效果在很大程度上受文本注释位置的影响,而且,文本注释位置又由于采用的坐标系统的不同而呈现出不同的文本移动情况。接下来,本文将会详细介绍文本注释位置的坐标系统。matplotlib的注释一共有两种,第一种是无指向型注释text();另一种是指向型注释annotate()。本文将主要介绍an
- AOP实现异常记录日志
Leo.荒
javaspringboot
1、导包org.springframework.bootspring-boot-starter-aop2、自定义注解packagecom.leo.annotate;importjava.lang.annotation.*;/***@authorLeo*/@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documented
- Django聚合统计踩坑记
逸省
前端提了个需求,需要统计各版本的使用情况。在网上搜寻一番,发现aggregate和annotate方法可以很简单的实现这个功能,在使用过程中遇到了个坑,就是无论是按照官方的帮助文档,还是各大论坛的教程,都不能获取到正确的结果。网上千篇一律的写法大致是这样的。Student.objects.values('name').annotate(Count('hobbies'))或者是这样的:Student
- django中group by 怎么用 一直报错NameError: name ‘Count‘ is not defined
weixin_43820008
djangodjangopython后端
今天需要在django上实现groupby但是网上的例子在我的电脑上怎么都试不出来例子:sql语句selectname,count(id)ascountsfromfoo_personmodelgroupbyname;django实现语句PersonModel.objects.values("name").annotate(counts=Count(id))虽然语句是对的但是一直报错NameErro
- 075: 【Django数据库】ORM聚合函数详解-Sum
weixin_34368949
python数据库
ORM聚合函数详解-Sum:Sum:求指定对象的总和。比如要求图书的销售总额。那么可以使用以下代码实现:fromdjang.db.modelsimportSumresult=Book.objects.annotate(total=Sum("bookstore__price")).values("name","total")以上的代码annotate的意思是给Book表在查询的时候添加一个字段叫做t
- 【Python】Django 聚合 Count与Sum用法,注意点
weixin_30287169
python
代码示例:fromdjango.db.modelsimportSum,Count#alarm_sum_group_items=models.FILE_PROTECT_ALARM.objects.filter(**condition).filter(device_hash=tmp_dict['device_hash']).values('device_hash').annotate(alarm_su
- Django count和group by顺序问题,解决被自动加入group by主键的问题
敬致知
DjangoPythondjangosql数据库
django中的数据库查询Model.objects.values('OSPlatform','GroupId').annotate(DeviceStatus=F('Status')).annotate(DeviceCount=Count('*'))如果values放在annotate前面,实际上的SQL会按照’OSPlatform’,'GroupId’这两个字段groupby;如果valus放在
- 关于 annotate 运行与预想不符(group by 多一个字段)的问题
庸了个白
djangopythonormannotate
解决由于在model中的meta添加了默认的order_by,导致使用annotate时一直无法满足预期的结果,只需要添加空的order_by重置排序,或者删去默认排序即可。过程在django中,使用anotate来做分组查询。以下是对annotate的介绍以及为什么我会出现问题的描述。假设我们有这么一张表table1:id用户名username系统system1张三Windows2李四Andro
- Altium Designer 为选中的元件自动分配位号
Ed_Moli_Circling
AD硬件设计硬件工程
操作概述图1.选中未确定位号(需要带有英文问号?)的元件2.TAA快捷键打开annotate界面3.确定顺序4.勾选元件所在原理图5.annotationscope(命名范围)下拉选项中选择(只对选中的对象分配)onlyselectedparts6.确定startindex(位号数字的起始值)7.updateschangelist更新变化列表,弹出information,点击OK8.(上方可看到预
- 【论文阅读笔记】Stable View Synthesis 和 Enhanced Stable View Synthesis
LuH1124
论文阅读笔记论文阅读笔记新视角合成可微渲染NeRF
目录StableViewSynthesis摘要引言EnhancedStableViewSynthesis从Mip-NeRF360的对比实验中找到的两篇文献,使用了卷积神经网络进行渲染和新视角合成,特此记录一下ToDoStableViewSynthesispaper:https://readpaper.com/pdf-annotate/note?pdfId=4739365752692277249&n
- Matplotlib_4.文字图例尽眉目
you_are_my_sunshine*
Python基础matplotlib
文章目录一、Figure和Axes上的文本1.text2.title和set_title3.figtext和text4.suptitle5.xlabel和ylabel6.annotate7.字体的属性设置二、Tick上的文本1.简单模式2.TickLocatorsandFormatters三、legend(图例)一、Figure和Axes上的文本Matplotlib具有广泛的文本支持,包括对数学表
- Python 数据分析 Matplotlib篇 增加注释【plt.text() & plt.annotate()】(第3讲)
侯小啾
Python数据分析宝典python数据分析matplotlib
Python数据分析Matplotlib篇增加注释【plt.text()&plt.annotate()】(第3讲) 博主侯小啾感谢您的支持与信赖。☀️꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ꧔ꦿ ✨本博客收录于专栏Python数据分析宝典.。✨专栏特点: ①逻辑清晰,循序渐进,符合初学者思维,内容友好程度高。 ②内
- python matplotlib 三维图形添加文字且不随图形变动而变动
fyhs
Pythonpythonmatplotlibtext2D
要在三维图形中添加文字并使其不随图形变动而变动,可以使用annotate()方法。这个方法可以在三维图形中添加文字,并且可以指定文字的位置、对齐方式和字体大小等属性。下面是一个示例代码,演示如何在三维图形中添加文字:importmatplotlib.pyplotaspltfrommpl_toolkits.mplot3dimportAxes3Dfig=plt.figure()ax=fig.add_s
- valgrind-callgrind分析程序性能
wowRicky
DeveloperQuality性能优化
用法:valgrind--tool=callgrind./execallgrind_annotate--inclusive=yes--threshold=100callgrind.out.xxx|&teelog
- Django回顾5 - 多表操作、其它字段和字段参数、中间表的三种创建方式
m0_69962105
数据库
【1】多表操作基于对象跨表查(子查询)执行两句sql语句,没有连表操作基于双下划线的连表查一次查询,连表操作【2】聚合查询(aggregate)聚合函数Min、Max、sum、Avg、Countaggregate是QuerySet的一个终止子句,用来做聚合查询Book.objects.all().aggregate(Avg('price'))【3】分组查询(annotate)分组查询一般和聚合查询
- Django回顾5
老登,快爆金币
django数据库python
目录一.多表查询1.基于对象的跨表查询一对多查询(publish与book)一对一查询(Author与AuthorDetail)多对多查询(Author与Book)2.基于双下划线的跨表查询一对多查询多对多查询一对一查询连续跨表查询3.聚合查询与分组查询聚合查询aggregate(*args,**kwargs)分组查询annotate()4.F查询与Q查询F查询:拿到某个字段在表中具体的值Q查询:
- AS 编辑区域左侧菜单内容解析
二愣子传奇
菜单示意图Annotate:注释,显示当前代码的编译者Soft-WrapAllFiles,Soft-WrapCurrentFile:经测试,会将当前页面的内容,超出屏幕部分换行显示在当前屏幕可见区域内。showLineNumbers:显示行数ShowIntentGuides:布吉岛Breadcumbs:显示方法覆盖层级ConfigureGutterIcons:配置显示图标,会跳转到Settings
- Django ORM查询之聚合函数、聚合查询(aggregate)、分组查询(annotate)
qd-hhkj
djangosqlite数据库
django版本3.2python3.6.8一、聚合函数常见的五个聚合函数:Avg(Average):平均值Max(Maximum):最大值Min(Minimum):最小值Sum(Summary):求和Count:个数导入语句:fromdjango.db.modelsimportAvg,Max,Min,Sum,Count,Q,F#Q查询和F查询也可以一起导入,一般会经常频繁使用以上五个聚合函数都可
- django ORM外键连表查询
raoxurou
Djangodjangopython后端
系列文章目录初识DjangoDjangoORM表的创建和增删改查django请求生命周期流程图和路由层Django视图层,模版层ORM单表关键字查询文章目录系列文章目录外键一对多和一对一增删改查清除数据基于对象的跨表查询基于双下滑线的跨表查询双下划线进阶操作聚合查询:aggregate分组查询:annotate报错修改配置大小分组F查询Q查询djangoorm开启事物操作orm查询为惰性查询,要数
- 一些java笔试题解
nvd11
Javajava
1)WhichofthefollowingtechniquescanaJavaSEprogrammerusetoincreasethethreadsafetyofaprogram?a.Usepublicstaticvariablesb.Writeclassessotheyareimmutablec.UseThreadLocalvariablesd.UseFinalclassese.Annotate
- 《数据分析与挖掘》里的 python函数积累
逆夏11111
python
annotate标注文字出自数据分析第三章P36**annotate语法说明:annotate(s=‘str’,xy=(x,y),xytext=(l1,l2),…)s为注释文本内容xy为被注释的坐标点xytext为注释文字的坐标位置importmatplotlib.pyplotaspltimportnumpyasnpx=np.arange(0,6)y=x*xplt.plot(x,y,marker=
- 【django】django的orm的分组查询
春天的菠菜
djangopythondjango开发语言
前言:django当中分组查询如何实现?annotatefrommyappimportmodelsfromdjango.db.models.functionsimportTruncMonthfromdjango.db.modelsimportCount,Avg#分组values就是取值作用model.Book.objects.values('month').annotate(count=Count
- 【Android Studio】工程中文件Annotate with Git Blame 不能点击
Aaron_MK
androidstudio
问题描述工程文件中想要查看代码提交信息但是相关按钮不可点击解决方法AndroidStudio->Preferences->VersionControl->在Unregisteredroots里找到你想要的工程文件点击左上角➕号然后右下角Apply即可
- 2021-10-15
默默_小鱼
目录aggregate和annotate方法的使用场景aggregate()方法详解annotate()方法详解Annotate方法与Filter方法联用Annotate与order_by()联用Annotate与values()联用回到顶部aggregate和annotate方法的使用场景Django的aggregate和annotate方法属于高级查询方法,主要用于组合查询,是Django高手
- linux之perf(8)annotate标注
Once_day
Iinux小白之路linux
Linux之perf(8)annotate标注Author:OncedayDate:2023年10月12日漫漫长路,才刚刚开始…注:该文档内容采用了GPT4.0生成的回答,部分文本准确率可能存在问题。参考文档:Tutorial-PerfWiki(kernel.org)perf-annotate(1)-Linuxmanualpage(man7.org)文章目录Linux之perf(8)annotat
- matplotlib入门之plt.plot折线图跟常用基本函数
小文大数据
python数据可视化pythonmatplotlib可视化
目录一、简单折线图二、常用基本函数:plt.xticks,plt.yticks,ply.xlim,plt.ylim,plt.xlabel,plt.ylabel,plt.title,plt.legend等三、折线图函数plt.plot()的参数介绍及详解四、调整坐标轴:plt.spines[]五、文本标注:plt.text()六、文本箭头注释:plt.annotate()七、绘图的填充:plt.fi
- QT 的自定义宏 #define QT_ANNOTATE_CLASS(type, ...)什么意思
openwin_top
c++qt开发语言
这段C++代码定义了一个名为QT_ANNOTATE_CLASS的宏,用于在类定义中添加注解或属性。宏的定义格式为:#defineQT_ANNOTATE_CLASS(type,...)其中,type是要添加注解或属性的类的名称,…表示可变参数列表,可以用于传递注解或属性的具体内容。该宏的作用是在类定义中插入额外的注解或属性,以便在编译器或其他工具中进行处理。这些注解或属性可以用于静态分析、代码生成、
- Idea开发快捷键及常用设置(长期更新)
雨欲语
工具及项目管理长期更新intellij-ideajavaintellijidea
1、输出System.out.println()快捷方式:输入sout,然后回车选择2、main函数快捷方式:输入psvm,然后回车选择3、查看git提交记录:行号上右键,选择Annotate:4、代码格式化:Ctrl+Alt+L,但注意可能会跟QQ快捷键冲突。5、大小写转换:Ctrl+Shift+U6、取消缩进:Shift+Tab7、展开代码:Ctrl++8、折叠代码:Ctrl+-9、注释代码:
- Django QuerySet API
noai
何时对QuerySet求值:迭代len()list()序列化返回查询集的方法filterallexcludeannotate:Blog.objects.annotate(Count('entry'))查询每个blog中有几个entryorder_byreverse()反转distinct():去重values():返回一个ValuesQuerySet,一个QuerySet的子类,返回字典而不是一个
- Enum 枚举
120153216
enum枚举
原文地址:http://www.cnblogs.com/Kavlez/p/4268601.html Enumeration
于Java 1.5增加的enum type...enum type是由一组固定的常量组成的类型,比如四个季节、扑克花色。在出现enum type之前,通常用一组int常量表示枚举类型。比如这样:
public static final int APPLE_FUJI = 0
- Java8简明教程
bijian1013
javajdk1.8
Java 8已于2014年3月18日正式发布了,新版本带来了诸多改进,包括Lambda表达式、Streams、日期时间API等等。本文就带你领略Java 8的全新特性。
一.允许在接口中有默认方法实现
Java 8 允许我们使用default关键字,为接口声明添
- Oracle表维护 快速备份删除数据
cuisuqiang
oracle索引快速备份删除
我知道oracle表分区,不过那是数据库设计阶段的事情,目前是远水解不了近渴。
当前的数据库表,要求保留一个月数据,且表存在大量录入更新,不存在程序删除。
为了解决频繁查询和更新的瓶颈,我在oracle内根据需要创建了索引。但是随着数据量的增加,一个半月数据就要超千万,此时就算有索引,对高并发的查询和更新来说,让然有所拖累。
为了解决这个问题,我一般一个月会进行一次数据库维护,主要工作就是备
- java多态内存分析
麦田的设计者
java内存分析多态原理接口和抽象类
“ 时针如果可以回头,熟悉那张脸,重温嬉戏这乐园,墙壁的松脱涂鸦已经褪色才明白存在的价值归于记忆。街角小店尚存在吗?这大时代会不会牵挂,过去现在花开怎么会等待。
但有种意外不管痛不痛都有伤害,光阴远远离开,那笑声徘徊与脑海。但这一秒可笑不再可爱,当天心
- Xshell实现Windows上传文件到Linux主机
被触发
windows
经常有这样的需求,我们在Windows下载的软件包,如何上传到远程Linux主机上?还有如何从Linux主机下载软件包到Windows下;之前我的做法现在看来好笨好繁琐,不过也达到了目的,笨人有本方法嘛;
我是怎么操作的:
1、打开一台本地Linux虚拟机,使用mount 挂载Windows的共享文件夹到Linux上,然后拷贝数据到Linux虚拟机里面;(经常第一步都不顺利,无法挂载Windo
- 类的加载ClassLoader
肆无忌惮_
ClassLoader
类加载器ClassLoader是用来将java的类加载到虚拟机中,类加载器负责读取class字节文件到内存中,并将它转为Class的对象(类对象),通过此实例的 newInstance()方法就可以创建出该类的一个对象。
其中重要的方法为findClass(String name)。
如何写一个自己的类加载器呢?
首先写一个便于测试的类Student
- html5写的玫瑰花
知了ing
html5
<html>
<head>
<title>I Love You!</title>
<meta charset="utf-8" />
</head>
<body>
<canvas id="c"></canvas>
- google的ConcurrentLinkedHashmap源代码解析
矮蛋蛋
LRU
原文地址:
http://janeky.iteye.com/blog/1534352
简述
ConcurrentLinkedHashMap 是google团队提供的一个容器。它有什么用呢?其实它本身是对
ConcurrentHashMap的封装,可以用来实现一个基于LRU策略的缓存。详细介绍可以参见
http://code.google.com/p/concurrentlinke
- webservice获取访问服务的ip地址
alleni123
webservice
1. 首先注入javax.xml.ws.WebServiceContext,
@Resource
private WebServiceContext context;
2. 在方法中获取交换请求的对象。
javax.xml.ws.handler.MessageContext mc=context.getMessageContext();
com.sun.net.http
- 菜鸟的java基础提升之道——————>是否值得拥有
百合不是茶
1,c++,java是面向对象编程的语言,将万事万物都看成是对象;java做一件事情关注的是人物,java是c++继承过来的,java没有直接更改地址的权限但是可以通过引用来传值操作地址,java也没有c++中繁琐的操作,java以其优越的可移植型,平台的安全型,高效性赢得了广泛的认同,全世界越来越多的人去学习java,我也是其中的一员
java组成:
- 通过修改Linux服务自动启动指定应用程序
bijian1013
linux
Linux中修改系统服务的命令是chkconfig (check config),命令的详细解释如下: chkconfig
功能说明:检查,设置系统的各种服务。
语 法:chkconfig [ -- add][ -- del][ -- list][系统服务] 或 chkconfig [ -- level <</SPAN>
- spring拦截器的一个简单实例
bijian1013
javaspring拦截器Interceptor
Purview接口
package aop;
public interface Purview {
void checkLogin();
}
Purview接口的实现类PurviesImpl.java
package aop;
public class PurviewImpl implements Purview {
public void check
- [Velocity二]自定义Velocity指令
bit1129
velocity
什么是Velocity指令
在Velocity中,#set,#if, #foreach, #elseif, #parse等,以#开头的称之为指令,Velocity内置的这些指令可以用来做赋值,条件判断,循环控制等脚本语言必备的逻辑控制等语句,Velocity的指令是可扩展的,即用户可以根据实际的需要自定义Velocity指令
自定义指令(Directive)的一般步骤
&nbs
- 【Hive十】Programming Hive学习笔记
bit1129
programming
第二章 Getting Started
1.Hive最大的局限性是什么?一是不支持行级别的增删改(insert, delete, update)二是查询性能非常差(基于Hadoop MapReduce),不适合延迟小的交互式任务三是不支持事务2. Hive MetaStore是干什么的?Hive persists table schemas and other system metadata.
- nginx有选择性进行限制
ronin47
nginx 动静 限制
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;...
server {...
location ~.*\.(gif|png|css|js|icon)$ {
- java-4.-在二元树中找出和为某一值的所有路径 .
bylijinnan
java
/*
* 0.use a TwoWayLinkedList to store the path.when the node can't be path,you should/can delete it.
* 1.curSum==exceptedSum:if the lastNode is TreeNode,printPath();delete the node otherwise
- Netty学习笔记
bylijinnan
javanetty
本文是阅读以下两篇文章时:
http://seeallhearall.blogspot.com/2012/05/netty-tutorial-part-1-introduction-to.html
http://seeallhearall.blogspot.com/2012/06/netty-tutorial-part-15-on-channel.html
我的一些笔记
===
- js获取项目路径
cngolon
js
//js获取项目根路径,如: http://localhost:8083/uimcardprj
function getRootPath(){
//获取当前网址,如: http://localhost:8083/uimcardprj/share/meun.jsp
var curWwwPath=window.document.locati
- oracle 的性能优化
cuishikuan
oracleSQL Server
在网上搜索了一些Oracle性能优化的文章,为了更加深层次的巩固[边写边记],也为了可以随时查看,所以发表这篇文章。
1.ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。(这点本人曾经做过实例验证过,的确如此哦!
- Shell变量和数组使用详解
daizj
linuxshell变量数组
Shell 变量
定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:
your_name="w3cschool.cc"
注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:
首个字符必须为字母(a-z,A-Z)。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用ba
- 编程中的一些概念,KISS、DRY、MVC、OOP、REST
dcj3sjt126com
REST
KISS、DRY、MVC、OOP、REST (1)KISS是指Keep It Simple,Stupid(摘自wikipedia),指设计时要坚持简约原则,避免不必要的复杂化。 (2)DRY是指Don't Repeat Yourself(摘自wikipedia),特指在程序设计以及计算中避免重复代码,因为这样会降低灵活性、简洁性,并且可能导致代码之间的矛盾。 (3)OOP 即Object-Orie
- [Android]设置Activity为全屏显示的两种方法
dcj3sjt126com
Activity
1. 方法1:AndroidManifest.xml 里,Activity的 android:theme 指定为" @android:style/Theme.NoTitleBar.Fullscreen" 示例: <application
- solrcloud 部署方式比较
eksliang
solrCloud
solrcloud 的部署其实有两种方式可选,那么我们在实践开发中应该怎样选择呢? 第一种:当启动solr服务器时,内嵌的启动一个Zookeeper服务器,然后将这些内嵌的Zookeeper服务器组成一个集群。 第二种:将Zookeeper服务器独立的配置一个集群,然后将solr交给Zookeeper进行管理
谈谈第一种:每启动一个solr服务器就内嵌的启动一个Zoo
- Java synchronized关键字详解
gqdy365
synchronized
转载自:http://www.cnblogs.com/mengdd/archive/2013/02/16/2913806.html
多线程的同步机制对资源进行加锁,使得在同一个时间,只有一个线程可以进行操作,同步用以解决多个线程同时访问时可能出现的问题。
同步机制可以使用synchronized关键字实现。
当synchronized关键字修饰一个方法的时候,该方法叫做同步方法。
当s
- js实现登录时记住用户名
hw1287789687
记住我记住密码cookie记住用户名记住账号
在页面中如何获取cookie值呢?
如果是JSP的话,可以通过servlet的对象request 获取cookie,可以
参考:http://hw1287789687.iteye.com/blog/2050040
如果要求登录页面是html呢?html页面中如何获取cookie呢?
直接上代码了
页面:loginInput.html
代码:
<!DOCTYPE html PUB
- 开发者必备的 Chrome 扩展
justjavac
chrome
Firebug:不用多介绍了吧https://chrome.google.com/webstore/detail/bmagokdooijbeehmkpknfglimnifench
ChromeSnifferPlus:Chrome 探测器,可以探测正在使用的开源软件或者 js 类库https://chrome.google.com/webstore/detail/chrome-sniffer-pl
- 算法机试题
李亚飞
java算法机试题
在面试机试时,遇到一个算法题,当时没能写出来,最后是同学帮忙解决的。
这道题大致意思是:输入一个数,比如4,。这时会输出:
&n
- 正确配置Linux系统ulimit值
字符串
ulimit
在Linux下面部 署应用的时候,有时候会遇上Socket/File: Can’t open so many files的问题;这个值也会影响服务器的最大并发数,其实Linux是有文件句柄限制的,而且Linux默认不是很高,一般都是1024,生产服务器用 其实很容易就达到这个数量。下面说的是,如何通过正解配置来改正这个系统默认值。因为这个问题是我配置Nginx+php5时遇到了,所以我将这篇归纳进
- hibernate调用返回游标的存储过程
Supanccy2013
javaDAOoracleHibernatejdbc
注:原创作品,转载请注明出处。
上篇博文介绍的是hibernate调用返回单值的存储过程,本片博文说的是hibernate调用返回游标的存储过程。
此此扁博文的存储过程的功能相当于是jdbc调用select 的作用。
1,创建oracle中的包,并在该包中创建的游标类型。
---创建oracle的程
- Spring 4.2新特性-更简单的Application Event
wiselyman
application
1.1 Application Event
Spring 4.1的写法请参考10点睛Spring4.1-Application Event
请对比10点睛Spring4.1-Application Event
使用一个@EventListener取代了实现ApplicationListener接口,使耦合度降低;
1.2 示例
包依赖
<p