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

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: @PostConstruct和@Initialize是Java的两个注解,用于在对象创建后执行初始化操作。 @PostConstruct注解表示在对象创建后立即执行的方法。这个注解通常用于执行一些初始化操作,例如初始化对象的属性或连接到数据库等。 @Initialize注解表示在对象创建后执行的方法,但是它不是立即执行的。相反,它是在对象创建后的某个时间点执行的,通常是在应用程序启动时。这个注解通常用于执行一些长时间运行的初始化操作,例如加载配置文件或初始化线程池等。 总之,@PostConstruct和@Initialize都是用于在对象创建后执行初始化操作的注解,但它们的执行时间和用途略有不同。 ### 回答2: @PostConstruct是一个在Spring框架使用的注解,用于标注在类的方法上。这个方法会在类被初始化之后立即执行。通常用于在类实例化之后进行一些初始化操作,例如读取配置文件、初始化数据库连接等。 使用@PostConstruct注解的方法必须是非静态的,并且没有任何参数。它可以和其他注解一起使用,如@Autowired、@Value等。当被标注的方法执行完毕后,Spring容器才会完成Bean的初始化过程。 另一方面,initialization是一个数据类型。在Java,它是用于表示对象的初始化状态的。当一个对象被创建后,它会经历一系列的初始化阶段,直到最终被完全初始化为可用状态。 在编程,初始化是指在对象被创建时对其进行设置和准备。这个过程可能包括分配内存、初始化属性、执行构造函数等。初始化可以通过构造函数、实例初始化块、静态初始化块、对象方法等方式来完成。 综上所述,@PostConstruct是一个Spring框架的注解,用于在类初始化后执行特定的方法。而initialization是一个Java的概念,表示对象的初始化状态。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值