Spring里的那些能在服务启动时执行自定义操作的方法

前言

最近碰到好多类似能让方法在服务/程序启动的时候执行自定发代码的方法,现在来总结下

一、CommandLineRunner

这个在我学习Java实现文件监听 FileFilterUtils相关使用的时候就说过了,复制一遍

@FunctionalInterface
public interface CommandLineRunner {

	/**
	 * Callback used to run the bean.
	 * @param args incoming main method arguments
	 * @throws Exception on error
	 */
	void run(String... args) throws Exception;

}

​ 简单来说,实现这个接口的run方法,就可以在项目启动时,执行run方法的内容,这里,我在run方法里定义了文件监听器的定义和绑定,和初始化文件路径(需要使用的路径如果不存在就创建)

下面是代码,需要注意的是,实现CommandLineRunner的类需要注入到Spring命名空间,@Component之类的(我这里程序需要,不知道不加行不行),如果有多个实现了这个接口的类,可以使用@Order(value=1)这样的来指定执行顺序

二、@PostConstruct

第二个就是我在碰到工具类Utils中注入Service运行时为null问题时,了解的,用法可以点击进去看看

@PostConstruct 点进去可以看到是来自package javax.annotation; 是Java自己的注解

源码中的注释
在这里插入图片描述

这个注解@PostConstruct的作用大概就是被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。
找了张网图⬇
在这里插入图片描述

三、实现InitializingBean接口

第三种是实现InitializingBean接口重写其afterPropertiesSet方法,实现DisposableBean接口重写destroy方法

InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法。

具体代码查看Spring中的InitializingBean接口的使用,没去操作过

四、 @Bean(initMethod = “xxx”, destroyMethod = “xxx”)

最后一个就算我今天刚看到的,在使用@Bean注解定义bean的时候指定初始化方法
Java truelicense 实现License授权许可和验证

这个方法就是在服务开始的时候,把一个方法注册成bean,并通过指定initMethod属性来让这个方法在服务开始时执行,这里我用例在服务启动时安装证书。
Tisp: 不指定initMethod不会自动执行初始化方法

五、@Bean和@Component有什么不一样,都是创建bean

众所周知,@Bean是为目标创建一个bean。我不禁在想,这和@Component @Controller @Service @Repository @Configuration等一系列实际上是使用@Component来加入spring容器的方法有什么不一样

于是我总结了以下几个不一样的地方

第一点,@Component和@Bean做两件完全不同的事情,不应该混淆。

@Component(以及@Service和@Repository)用于使用类路径扫描自动检测和自动配置bean。在带注释的类和bean之间有一个隐含的一对一映射(即每个类一个bean)。这种方法对连接的控制非常有限,因为它纯粹是声明性的。

@Bean用于显式声明单个bean,而不是像上面那样让Spring自动声明。它将bean的声明与类定义解耦,并允许您按照选择的方式创建和配置bean。

意思就是,@Component是标记,然后等着spring扫描创建bean,@Bean是主动创建

第二点,@Componet 一般放在类上面,@Bean放在方法上面

相同点:@Componet /@Bean生成的bean都提供给autowire使用

六、 参考资源

  1. component和bean区别
  2. spring注解为bean指定InitMethod和DestroyMethod
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值