spring中容器启动过程中初始化资源使用方法

 一、定义

在业务场景中,有时需要我们在容器启动过程中加载资源,完成数据的初始化或者配置,需要在调用前加载进spring容器过程中去,有以下一些方法来实现

1.定义静态常量,随着类的生命周期加载而提前加载。一般使用较多,这里不做说明

2.实现InitializingBean接口;重写afterPropertiesSet()方法

3.实现CommandLineRunner接口(Spring Boot中使用);容器启动之后,加载实现类的逻辑资源,已达到完成资源初始化的任务

4.@PostConstruct;在具体Bean的实例化过程中执行

 

 二、实现InitializingBean接口

重写afterPropertiesSet()方法,来完成资源的初始化

1.InitializingBean接口

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

2.使用方法

1)编写一个类引用InitializingBean接口,重写其中的afterPropertiesSet方法,在其中写自己的方法

使用注解@Component或者自己在spring配置文件中装配bean来注入spring容器

可以看到在项目启动过程中就已经执行了TestComponent类中重写的afterPropertiesSet方法

 

三、Spring boot中实现CommandLineRunner接口

1.Java 文件中配置实现CommandLineRunner接口,重写run方法

@Component
@Slf4j
public class ExampleCommandLineRunner implements CommandLineRunner {
    @Autowired
    private JedisClusterClient jedisClusterClient;
    @Autowired
    private UserMapper userMapper;
    @Override
    public void run(String... args) throws Exception {
        User user=userMapper.selectByPrimaryKey(1);
        jedisClusterClient.set("test:user",user.toString());
        log.info("测试CommandLineRunner初始化加载接口:加载一个user_id=1的用户=[{}]",user,toString());
    }
}

 2.执行结果

在启动spring过程中加载进来

3.@Order排序

可以使用注解@Order注解,如果想要对加载资源的顺序进行排序

4.结果如下所示:

可以看到:ExampleCommandLineRunner类中的run方法在ExampleCommandLineRunner2的run方法之后执行,因为定义的@Order(value)顺序原因,value越小,优先级越高,注意最小是1,不能低于这个,否则会报错

 

 四、@PostConstruct注解

用于方法上,@PostConstruct注解的方法,会在构造方法之后执行。加载顺序为:Constructor > @Autowired > @PostConstruct > 静态方法,但要注意以下使用方法

特点:

- 只有一个非静态方法能使用此注解
- 被注解的方法不得有任何参数
- 被注解的方法返回值必须为void
- 被注解方法不得抛出已检查异常
- 此方法只会被执行一次

@Component
@Slf4j
public class ExamplePostConstruct {
    @Autowired
    private JedisClusterClient jedisClusterClient;
    @Autowired
    private UserMapper userMapper;
    @PostConstruct
    public void loadUser(){
        User user=userMapper.selectByPrimaryKey(3);
        jedisClusterClient.set("test:user_id=3",user.toString());
        log.info("测试PostConstruct初始化加载接口:加载一个user_id=3的用户=[{}]",user,toString());
    }
}

结果展示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值