首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有没有办法在一个动作之后重新执行postconstract init方法?

在Java中,@PostConstruct@Init是两个常用的注解,用于在对象初始化之后执行特定的方法。@PostConstruct注解用于在依赖注入完成后执行初始化操作,而@Init注解用于在对象实例化后执行初始化操作。

然而,@PostConstruct注解只能在对象的构造函数执行完毕后调用,而@Init注解只能在对象实例化后调用。如果需要在一个动作之后重新执行@PostConstruct@Init方法,可以通过以下几种方式实现:

  1. 创建一个新的实例:可以通过创建一个新的对象实例来重新执行@PostConstruct@Init方法。这样可以保证在每次需要重新执行方法时都创建一个新的对象。
  2. 使用代理对象:可以使用代理对象来包装原始对象,并在每次调用方法时触发@PostConstruct@Init方法的执行。这可以通过使用动态代理或静态代理来实现。
  3. 手动调用方法:如果可以访问对象的实例,可以直接调用@PostConstruct@Init方法来重新执行。这需要在需要重新执行方法的地方手动调用相应的方法。

需要注意的是,以上方法都需要根据具体的业务场景和代码结构来选择合适的方式。此外,还需要注意避免在方法执行过程中引发死循环或其他不可预料的问题。

以上是关于在一个动作之后重新执行@PostConstruct@Init方法的一些思路和方法。具体实现方式可能因项目框架和需求而异,可以根据具体情况选择适合的方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python 单例

__new__(cls)* 否则 Python 的解释器 得不到 分配了空间的 对象引用,就不会调用对象的初始化方法 注意:__new__ 是一个静态方法调用时需要 主动传递 cls 参数 ?...Python 中的单例 单例 —— 让 类 创建的对象,系统中 只有 唯一的一个实例 定义一个 类属性,初始值是 None,用于记录 单例对象的引用 重写 __new__ 方法 如果 类属性 is...分配空间 __init__ 对象初始化 在上一小节对 __new__ 方法改造之后,每次都会得到 第一次被创建对象的引用 但是:初始化方法还会被再次调用 需求 让 初始化动作 只被 执行一次 解决办法...定义一个类属性 init_flag 标记是否 执行过初始化动作,初始值为 False __init__ 方法中,判断 init_flag,如果为 False 就执行初始化动作 然后将 init_flag...设置为 True 这样,再次 自动 调用 __init__ 方法时,初始化动作就不会被再次执行 了 class MusicPlayer(object): # 记录第一个被创建对象的引用

78730

【强化学习】DQN 的各种改进

因此,本文中,我们将介绍一下各个改进的方法,并在最后给出用 Nature-DQN 的实现方法。... Nature DQN 出来之后,肯定很多人在思考如何改进它。那么 DQN 有什么问题呢? 目标 Q 值的计算准确吗?全部通过 max Q 来计算有没有问题? 随机采样的方法好吗?...按道理不同样本的重要性是不一样的 Q 值代表状态,动作的价值,那么单独动作价值的评估会不会更准确? DQN 中使用 的方法来探索状态空间,有没有更好的做法? 使用卷积神经网络的结构是否有局限?...DQN 训练时间太慢了,跑一个游戏要好几天,有没有办法更快? DQN 训练是单独的,也就是一个游戏弄一个网络进行训练,有没有办法一个网络同时掌握多个游戏,或者训练某一个游戏后将知识迁移到新的游戏?...DQN 能否用在连续动作输出问题? 那么现在的事实发现 DeepMind 确实在思考解决上面的几个问题,并且基本上每一个问题都有一定的解决方法

3.3K30
  • 【实测】windows安装部署go实录(超详细)

    重回主线,现在go语言已经可以生效了,但是如果你看其他教程,会发现接下来还有一段麻烦的动作,就是配置gopath ,gopath其实只是一个路径,用来存放你go语言代码的路径,当你cmd中,输入go...去src文件夹里后,你要依次做以下几件事: 创建模块管理文件:go.mod 首先打开cmd,进入src目录,然后执行命令(go mod init src),然后再用dir就可以看到go.mod文件了,有它在...然后不要着急,先在src目录下再创建俩个文件夹,一个叫main,一个叫tool。 之后的基础语法学习中,我们main的里面写入口代码,tool里面写一些工具函数即可。...然后main文件夹中我们即可开始第一个脚本的创建了。...实际上,go脚本的运行方法非常多,还可以用下列方法运行: go run test.go go build test.go 这个命令会生成一个exe可执行文件,之后双击就可以运行了, 当然,因为双击后会启动一个临时

    1.1K30

    用Python制作一个猫咪小秒表

    秒表是一项随处可见的神奇小物件,最常用到秒表的两大场景,一个是运动会,另一个是健身房,因此也总是让人联想到汗水和心跳,贲张的血管,粗重的呼吸,时间似乎变得缓慢,那一只聚拢万千目光的小小秒表,此刻却像一座沉重而古老的大钟...那么,秒表有没有办法做的可爱、调皮一点呢?比如像下图这样的猫咪秒表。 要实现这样的效果,用python就足够了。主要用到的就是matplotlib包。...每一帧都用一张上文生成的不同的png图片,遍历完png图片之后,再继续循环往复。不难看出,原始gif中的猫耳朵是向左的,如果改成向上的,看着要舒服一些。这就需要将图片沿着斜45度角进行旋转。...最后,就是动画效果的实现,最主要的语句是这个: #fig指的是画布,update指的是执行每一帧更新的函数,length指的是一共有多少帧,init指的是第一帧所执行的函数 ani=animation.FuncAnimation...(fig,update,length,init_func=init,interval=interval_time) update函数中,对猫咪的动作和指针的位置按帧来进行赋值,代码如下: #对猫咪的动作进行帧赋值

    1.3K50

    centos搭建lnmp

    所以,现在网站会面临这种大并发量的时候,使用Nginx 来作为服务器程序确实是一个不错的选择,不过如果使用LAMP环境的话,对于php的执行过程是使用mod-php这样的一个apache 模块,但使用...在编译出现异常,重新编译的时候,需要先删除mysql目录下的CMakeCache.txt这个文件,然后再进行编译!!!...p=186 4.mysql启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打开这个文件查看在[mysqld]节下有没有指定数据目录(datadir)。...解决方法:请在[mysqld]下设置这一行:datadir = /usr/local/mysql/data 5.skip-federated字段问题 解决方法:检查一下/etc/my.cnf文件中有没有没被注释掉的...6.错误日志目录不存在 解决方法:使用“chown” “chmod”命令赋予mysql所有者及权限 7.selinux是一个安全系统,如果是centos系统,默认会开启selinux 解决方法:关闭它

    1.4K21

    嵌入式linux下如何尽快播放开机音乐

    今天考虑如何尽快启动一个应用程序,播个开机音乐什么的。...最开始的启动流程是这样的,bootloader 启动kernel,kernel跑完挂载文件系统, 然后会执行/init,而这个init 是指向busybox的一个软链接, busybox做一些事情后,会解析...这么做了之后,好一些了,五秒多就可以听到声音了,打印“/ #”的时间也五秒多(比原来慢一些,毕竟多跑了个线程抢资源) 这个时候,忍不住就要想,能不能再往前提,我干脆提到跟init并行,不改文件系统的话...但总比串行执行,延迟一秒多,要好些。 而且这么看来,其他应用程序,也不是非得等到“/ #”之后调用,跟这个音乐一起并行嘛,再开个进程,也是个方法。...再提前就要到内核里面去了,唔,驱动初始化完毕之后,补一个initcall,就用来放音乐,理论上似乎也是可以的,就是有点别扭。 再提前?

    1.6K10

    php-fpm重启导致的程序执行中断问题详解

    后down掉了,导致没写入mongo -第一个情况工作多年的经验来看应该不至于,那就先根据第二种情况继续查吧 那就去看下php-fpm 的日志,看对应的时间点有没有什么异常 [wu.daolin@...总结原因 业务请求时执行完 sendPresent这个动作后 , 还没来得及写mongo库, php-fpm就刚好被 terminate 了,…....,把killproc -p {pidfile} php-fpm 这句 改成 killproc -p {pidfile} php-fpm -QUIT php-fpm 的worker 是计数n次后就会杀掉重新一个...,还有动作执行完,这可能就造成丢数据了。。。...肯定是必现terminate 现在代码部署逻辑是同步代码+清理opcache和yac缓存, 不对php-fpm进程做操作 php-fpm 会自己对worker进程处理的请求数计数,达到一定数量就干掉再重新一个

    1.5K30

    想更快的写完代码?dataclass 来帮你!

    假如你正在为一个评论系统编写代码,你新建了一个类,定义了几个成员变量,并为其编写了 init、repr 等魔术方法,代码如下: class Comment: def __init__(self,...问题是,后面还有可能增加字段或删除字段,有没有办法我定义好类的成员变量之后,这些方法去自动更新?省的我改来改去?...注意上述的 frozen = True 表示对象是不可变对象,初始化完成之后,不可对成员重新赋值,这一点可以应用在固定对象,不可变的配置信息等应用场景下,非常实用。...如果 eq 和 frozen 都是 True,则会生成 __hash__ 方法 如果你仍然要自己动手写这些函数也是可以的,比如说:当你自定义了 __init__()时,init = x 这个参数会被忽略...看到这里,你已经知道 dataclass 能够自动生成,=这些比较方法。但是这些比较方法一个缺陷是,它们使用类中的所有字段进行比较,有没有办法让某些字段不参与比较呢?

    44030

    Python单例设计模式【详细】

    :地址相同,证明这两个对相关本质上是相同对象四、只执行一次初始化方法每次使用类名() 创建对象时,Python解释器都会自动调用者两个方法:__new__ 分配空间__init__ 对象初始化在上面的代码对...__new__方法改造之后,每次都会得到第一次被创建对象的引用,但是初始化方法还是会被再次调用。...解决办法:定义一个类属性init_flag标记是否执行过初始化动作,初始值为False__init__方法中判断init_flag,如果为False就执行初始化动作然后将init_flag设置为True...,这样再次调用__init__方法时,初始化动作就不会被再次执行了1.代码实现前准备,创建了两次对象,初始化方法执行两次:如图2.初始化动作只被执行一次的代码:class MusicPlayer(object...如果没有被执行过,再执行初始化动作 print("初始化方法执行") # 3.

    76131

    从0单排强化学习原理(四)

    03 基于时间差分的强化学习方法 蒙特卡罗方法求解值函数问题在哪?效率不高,因为要采样,一条Instance最后一个状态还必须是结束状态。所以出现了时间差分方法(TD),取前两种算法的精华。...时间差分方法动作值函数更新方式为: 这里大家先理解下差分,时间序列中,下一个数字减去上一个数字,就叫一阶差分,上式alpha乘的部分就是TD偏差。...没错,就是0,因为: 已知 状态下就会确定采取行动 状态下就会确定采取行动 所以我们先随机初始化策略和学习率,边采样边更新动作值函数,直到收敛,两种更新算法的伪代码如下: 同策略的Sarsa方法..., a[t+1]) - Q(s[t], a[t])) t++ } while (s[t] 不是最终状态) } while (Q(s,a)没收敛) 看完上述两种更新算法都是用后继一个动作值函数来更新当前动作值函数...因为: 所以: 这里又要注意的是,我们估计Gt的时候需要已知Rt+1~t+n,所以就要先等到采样结束,和前面Q-learning方法边采样变更新不同,我们有没有办法改造此算法,变成边采样边更新呢

    40610

    启动mysql报错The server quit without updating PID file!

    记得上次出现这个问题的时候,尝试了一些常规的方法,未果,所以索性重新进行安装。但是,相同的问题今天又出现了!!!OH, my god!...恰巧今天时间充裕,尝试各种办法,终于皇天不负有心人,经过一个小时的奋战后,终于让我给搞定,整个过程是这样的!...mysql启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打开这个文件查看在[mysqld]节下有没有指定数据目录(datadir)。...解决方法:请在[mysqld]下设置这一行:datadir = /usr/local/mysql/data skip-federated字段问题 解决方法:检查一下/etc/my.cnf文件中有没有没被注释掉的...看到这,我突然想到删除mysql库文件/data/mysql/中的“ib_*”文件,一不做二不休,反正是虚拟机中操作,大不了重新安装,于是我执行如下操作: ** 注意:** 执行该操作之前一定要对数据库进行备份

    130.9K61

    读者提问,如何让 tooltip 提示框内显示饼图

    实现思路(一段曲折的过程) 当天晚上有事,没来及看,转天上班途中,先看了眼配置项手册,确认没有现成功能可用的同时,注意到了一个关键点:提示框是一个 DOM 节点,也就是有办法作为 ECharts 的容器...,渲染对应的饼图 大体思路图示 但是还存在一个问题需要解决,这个问题有 2 个难点: 提示框首次弹出之前,带 id 的 div(回调函数返回的「饼图容器」)是不存在的,而且每次触发提示框显示/移动...,也没办法把这个动作加到「tooltip.formatter」的回调函数中,因为「问题 1」的覆盖,发生在函数返回结果之后。...为了解决这个问题,我想到了 2 种尝试的思路: 通过监听「events.finished」事件,主图表渲染动作完成后,如果存在提示框饼图的容器(div),则触发饼图的重新渲染; 通过回调函数的嵌套,「...「events.finished」事件,也就是当提示框指示的数据项/数据轴没发生改变时,提示框发生了「move」,而不是先「hide」再「show」: 「tooltip.formatter」的回调函数执行

    1.7K30

    【Java】JVM垃圾回收机制与类加载机制

    JVM内存区域分布 虚拟机栈:存放每个方法执行时的栈帧,一个方法调用到完成就对应栈帧虚拟机栈中入栈和出栈的过程。 本地方法栈:和虚拟机栈类似,不过是为Java中native方法服务的。...JVM中有一系列设定的GC Roots,当一个对象到任意一个GC Root都没有引用链时,则说明此对象不可达。 注:JVM并不是通过引用计数法来判断不可达对象的,因为这种办法没法解决循环引用的问题。...JVM中的垃圾回收算法 1、标记-清除算法 最基础的算法,GC会判断堆中对象是否不可达,如果满足清理条件(查看该对象是否有必要执行finalize()方法,有无必要的标准是该对象有没有被调用过finalize...此时除非对象finalize()方法重新获得了引用,否则它就会被清除掉。 以下几种算法不过都是对标记清除算法的改进。...如果一个类加载器收到了加载类的请求,它首先不会自己去加载,而是委派给它的父加载器去执行。层层委派之后,到了顶层由启动类加载器加载,只有当父加载器反馈无法加载此请求,才会让子加载器去加载。

    45020

    如何以面向对象的思想设计有限状态机

    FSM 会响应“事件”而改变状态,当事件发生时,就会调用一个函数,而且 FSM 会执行动作产生输出,所执行动作会因为当前系统的状态和输入的事件不同而不同。...了解了闸机的工作流程之后,我们就可以画出闸机的状态图,状态图如下: [闸机状态图] 在上图中,线条上面的字表示的是:闸机输入事件/闸机执行动作,方框内表示的是闸机的状态。...为了解决这个问题,可以采用状态转移表的方法来处理。 状态转移表 为了减少代码的长度,可以使用查表法,将各个信息存放于一个表中,根据事件和状态查找表项,找到需要执行动作以及即将转换的状态。...介绍了上述很基本的概念之后,我们来看状态机的设计。...定义了一个闸机类之后,就可以通过闸机类定义一个闸机实例: turnstile_t turnstile; 然后通过函数进行初始化: void turnstile_init(turnstile_t *p_this

    1.3K00

    如何以面向对象的思想设计有限状态机

    FSM 会响应“事件”而改变状态,当事件发生时,就会调用一个函数,而且 FSM 会执行动作产生输出,所执行动作会因为当前系统的状态和输入的事件不同而不同。...了解了闸机的工作流程之后,我们就可以画出闸机的状态图,状态图如下: ? 在上图中,线条上面的字表示的是:闸机输入事件/闸机执行动作,方框内表示的是闸机的状态。...为了解决这个问题,可以采用状态转移表的方法来处理。 状态转移表 为了减少代码的长度,可以使用查表法,将各个信息存放于一个表中,根据事件和状态查找表项,找到需要执行动作以及即将转换的状态。...介绍了上述很基本的概念之后,我们来看状态机的设计。...定义了一个闸机类之后,就可以通过闸机类定义一个闸机实例: turnstile_t turnstile; 然后通过函数进行初始化: void turnstile_init(turnstile_t *p_this

    46010

    从零开始配置 vim(11)——插件管理

    目前有两种解决办法 使用新版 neovim api neovim0.7 版本以后,我们可以使用下列 api 来创建并使用自动命令组 nvim_create_augroup({name}, {*opts...每次退出 nvim 再进来,需要重新设置,有没有觉得很麻烦呢?如果我们使用自动命令组,进入 init.lua 之后自动设置 path 就好了。...这样退出重新进入 nvim 之后不需要再次手动输入 path 了。 lua中执行vim命令 0.7以前的版本中无法通过上述api来创建自动命令。但是它提供了执行vim命令的接口。...我们可以使用 vim.cmd 来执行 vim 命令。它接收一个字符串参数,该字符串表示将要执行的 vim 命令。可以使用引号括起来,但是需要对其中的特殊字符进行转义。...完成之后我们可以使用 q来退出,如果出错可以使用 r来重新下载 本篇就到这里了。后面几篇文章主要通过该插件管理工具来下载并配置一些插件,敬请期待!

    1K30

    Python学习(八)---- 面向对象类之进阶

    普通的方法,可以实例化后直接调用,并且方法里可以通过self.调用实例变量或类变量,但静态方法是不可以访问实例变量或类变量的,一个不能访问实例变量和类变量的方法,其实相当于跟类本身已经没什么关系了,...想让上面的代码可以正常工作有两种办法 调用时主动传递实例本身给eat方法,即d.eat(d) eat方法中去掉self参数,但这也意味着,eat中不能通过self....删除属性方呢 执行del删除 1del d.eat 报错: 1AttributeError: can't delete attribute 默认不能删除,要删除也是类里再写一个方法 1class Dog...注:构造方法执行是由创建对象触发的,即:对象 = 类名() ;而对于 call 方法执行是由对象后加括号触发的,即:对象() 或者 类()() 1class Foo: 2 def __init...[əˈtrɪbjut] 属性; (人或物的) 特征 hasattr(obj,name_str) 判断object中有没有一个name字符串对应的方法或属性 1class Foo(object):

    44430

    Android Fragment 的妙用 - 优雅地申请权限和处理 onActivityResult

    前言 Fragment,简称碎片,可以简单地认为它就是一个“控件”,更加具体一点就是“View控制器”。它自身有生命周期。开发中,我们经常用到,再熟悉不过了。...那有没有办法,将这些繁琐的步骤封装起来呢,答案是有的。..., onCreate 方法里面,我们调用了 setRetainInstance 方法。..., fragment 实例是否会被重新创建(比如横竖屏切换),设置为 true,表示 configuration change 的时候,fragment 实例不会背重新创建,这样,有一个好处,即 configuration...接着我们来看 requestEachPermissions 方法 申请权限的时候,即 requestEachPermissions 方法中,我们先生成一个随机的 requestCode,并确保不会重复

    2.1K30
    领券