@Service注解类通过依赖注入初始化成员变量

2020-04-29  本文已影响0人  cherishpf

使用场景:

如果想在生成对象时候完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么就无法在构造函数中实现。为此,可以使用@PostConstruct注解一个方法来完成初始化,@PostConstruct注解的方法将会在依赖注入完成后被自动调用。

import lombok.Data;
import org.springframework.stereotype.Component;
/**
* Bean实例
*/
@Data
@Component
public class Job {
    private String jobId;
}

service类的代码如下:

import com.space.aspect.bo.Job;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;

@Service
public class JobService {
    private Job job;

    // 构造器注入方式
    @Autowired
    JobService(Job job){
        this.job = job;
    }

    @PostConstruct
    private void init(){
        // 初始化成员变量
        job.setJobId("testJobId");
    }

    // 对外提供的一个方法
    public String getJobId() {
        return job.getJobId();
    }
}

执行顺序
JobService有参构造器注入Job >> @PostConstruct初始化Job变量

另一种方式(不推荐):

import com.space.aspect.bo.Job;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;

@Service
public class JobService {
    // 属性注入方式
    @Autowired
    private Job job;

    // 无参构造器(可以不写)
    JobService(){
    }

    @PostConstruct
    private void init(){
        // 初始化成员变量
        job.setJobId("testJobId");
    }

    // 对外提供的一个方法
    public String getJobId() {
        return job.getJobId();
    }
}

执行顺序
JobService无参构造器>>@Autowired注入Job >> @PostConstruct初始化Job变量

上一篇 下一篇

猜你喜欢

热点阅读