@PostConstruct、Listener、File、Interceptor的执行顺序

本文介绍了ServletContextListener接口如何监听Web应用的生命周期,包括启动和终止时触发的事件处理方法。此外,还探讨了@PostConstruct注解的作用,特别是在依赖注入完成后进行初始化操作的场景。

Listener(在依赖注入之前 ):

在Servlet API中有一个ServletContextListener接口,它能够监听ServletContext对象的生命周期,实际上就是监听Web应用的生命周期。

当Servlet容器启动或终止Web应用时,会触发ServletContextEvent事件,该事件由 ServletContextListener 来处理。在 ServletContextListener 接口中定义了处理ServletContextEvent事件的两个方法。

contextInitialized(ServletContextEvent sce):当Servlet容器启动Web应用时调用该方法。在调用完该方法之后,容器再对Filter初始化,并且对那些在Web应用启动时就需要被初始化的Servlet进行初始化。

contextDestroyed(ServletContextEvent sce):当Servlet容器终止Web应用时调用该方法。在调用该方法之前,容器会先销毁所有的Servlet和Filter过滤器。

web.xml

<listener>  
    <listener-class>com.gjxx.system.utils.ContextListener</listener-class>  
</listener>

ContextListener.java

public class ContextListener implements ServletContextListener{  
    public void contextInitialized(ServletContextEvent sce) {  
        System.out.println("1111111111111111111");  
    }  
    public void contextDestroyed(ServletContextEvent sce) {  
        System.out.println("22222222222222222222222");  
    }  
}

 

@PostConstruct(在依赖注入之后,更适合调用数据库放入redis中)

spring.xml

<context:component-scan base-package="com.gjxx.system.controller,com.gjxx.system.utils" />  

LoginServiceImpl.java

@Component  
public class LoginServiceImpl{  
    @Autowired  
    private RedisTemplate<String, String> redisTemplate;  
      
    @PostConstruct  
    public void readProperties() {  
        System.out.println("这里要读属性了");  
        Map<String, String> map = (Map<String, String>) redisTemplate.opsForHash().get("aaa", "bb");  
    }  
}

 

转载于:https://www.cnblogs.com/yifanSJ/p/9220997.html

在 Spring 容器中,`@Autowired` 和 `@PostConstruct` 注解的执行顺序是固定的,并且遵循依赖注入和初始化阶段的规范流程。 当一个 Bean 被创建时,Spring 会先完成构造方法的调用,然后进行依赖注入。也就是说,`@Autowired` 注解所标注的字段、方法或构造函数会在 Bean 的构造方法执行完毕之后被处理[^1]。这意味着如果某个类中存在通过 `@Autowired` 注入的依赖,这些依赖将在构造函数执行完成之后被注入到该 Bean 中。 随后,在所有依赖注入完成之后,Spring 会执行使用 `@PostConstruct` 注解的方法。这个注解通常用于标记那些需要在依赖注入完成后执行的初始化逻辑。例如,可以用来建立数据库连接、加载缓存数据等操作。因此,`@PostConstruct` 方法是在依赖注入完成之后才被调用的[^2]。 以下是一个简单的代码示例,展示了这两个注解的执行顺序: ```java @Component public class ExampleBean { private Dependency dependency; @Autowired public void setDependency(Dependency dependency) { this.dependency = dependency; System.out.println("Dependency injected"); } @PostConstruct public void init() { System.out.println("Initialization logic here"); } public ExampleBean() { System.out.println("Constructor executed"); } } ``` 在这个例子中,输出顺序将是: 1. 构造函数输出“Constructor executed”。 2. 依赖注入方法输出“Dependency injected”。 3. 初始化方法输出“Initialization logic here”。 需要注意的是,`@PostConstruct` 是 JSR-250 标准的一部分,它并不局限于 Spring 框架,但 Spring 支持这一标准。此外,为了确保这些注解能够正常工作,必须启用注解驱动的配置,这通常是通过 `<context:annotation-config/>` 或者 `@AnnotationConfigApplicationContext` 来实现的[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值