spring中构造方法/@PostConstruct/@Autowired/@Value的执行顺序

19 篇文章 0 订阅
6 篇文章 0 订阅

spring中构造方法/@PostConstruct/@Autowired/@Value的执行顺序

从Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解,@PostConstruct和@PreDestroy,这两个注解被用来修饰一个非静态的void()方法。

使用

说明:使用两个类测试,TestController和TestService
将TestService ,使用@Autowired注入TestController中,
同时在TestService中使用@Value
分别在两个类中使用@PostConstruct和无参构造.
观察启动输出情况已经注入情况

第一个TestController

@RestController
public class TestController {
    @Autowired
    private TestService service;

    public TestController() {
        System.out.println("------------------这里是TestController的构造方法");
        System.out.println("==注入的TestService=="+service);
        System.out.println("---------------------------------------------");
    }

    @PostConstruct
    public void testPostConstruct() {
        System.out.println("-------这里是TestController的@PostCOnstruct方法");
        System.out.println("==注入的TestService=="+service);
        System.out.println("---------------------------------------------");
    }

    @RequestMapping("/get")
    public String get() {
        return service.get();
    }
}

第二个TestService

@Service
public class TestService {
    @Value("${test.string}")
    private String testString;

    public String get() {
        return "这里使用testService";
    }

    public TestService() {
        System.out.println("---------------------这里是TestService的构造方法");
        System.out.println("==testString=="+testString);
        System.out.println("---------------------------------------------");
    }

    @PostConstruct
    public void testPostConstruct() {
        System.out.println("----------这里是TestService的@PostConstruct方法");
        System.out.println("==testString=="+testString);
        System.out.println("---------------------------------------------");
    }
}

输出结果

------------------这里是TestController的构造方法
==注入的TestService==null
---------------------------------------------


---------------------这里是TestService的构造方法
==testString==null
---------------------------------------------


----------这里是TestService的@PostConstruct方法
==testString==testString
---------------------------------------------


-------这里是TestController的@PostCOnstruct方法
==注入的TestService==com.jd.service.TestService@6718f0d8
---------------------------------------------

可以看出先调用的两个类的构造方法,在调用构造方法的时候,@Autowired和@Value注入都是null;
随后调用的是@PostConstruct修饰的方法,此时的注入已经有了结果,so,肯定是在之前执行的.

结论

构造方法 >>>> @Autowired/@Value >>>> @PostConstruct

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值