`
最王座
  • 浏览: 140564 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring注解之@PostConstruct

阅读更多

一、注解解释

Spring的@PostConstruct注解在方法上,表示此方法是在Spring实例化该Bean之后马上执行此方法,之后才会去实例化其他Bean,并且一个Bean中@PostConstruct注解的方法可以有多个。

 

二、示例代码

1. spring配置文件

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd
">

	<!-- 引入属性文件 -->
	<context:property-placeholder location="classpath:config.properties" />

	<!-- 自动扫描dao和service包(自动注入) -->
	<context:component-scan base-package="com.wbf.bean" />

</beans>

 2. Bean1.java

 

 

package com.wbf.bean;

import javax.annotation.PostConstruct;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;

@Service("bean1")
public class Bean1 {
	
	private static final Logger log = Logger.getLogger(Bean1.class);
	
	public Bean1() {
		log.info(System.currentTimeMillis() + ": Bean1 Constructor");
	}
	
	@PostConstruct
	public void test() {
		log.info(System.currentTimeMillis() + ": bean1-->test()");
		Bean2.uniqueInstance().test();
		
	}
	
	@PostConstruct
	public void print() {
		log.info(System.currentTimeMillis() + ": bean1-->print()");
	}
}

 3. Bean2.java

 

 

package com.wbf.bean;

import org.apache.log4j.Logger;

public class Bean2 {
	
	private static final Logger log = Logger.getLogger(Bean2.class);
	
	private static Bean2 instance = uniqueInstance();
	
	public static Bean2 uniqueInstance() {
		if (instance == null)
			instance = new Bean2();
		
		return instance;
	}
	
	public Bean2() {
		log.info(System.currentTimeMillis() + ": Bean2 Construtor");
	}
	
	public void test() {
		log.info(System.currentTimeMillis() + ": bean2-->test()");
	}
}

4.  Bean3.java

 

 

package com.wbf.bean;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;

@Service("bean3")
public class Bean3 {
	
	private static final Logger log = Logger.getLogger(Bean3.class);
	
	public Bean3() {
		log.info(System.currentTimeMillis() + ": Bean3 Construtor");
	}
	
}

 5. SpringTest.java

 

 

package com.wbf.bean;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest {
	
	@Test
	public void test() {
		//加载/解析spring.xml, 得到BeanFactory, 实例化所有IOC容器中的Bean
		//在实例化每一个Bean之后,如果当前Bean包含@PostConstruct注解的方法则会马上执行该方法,之后才会去实例化其他的Bean
		//每一个Bean中可以有多个包含@PostConstruct注解的方法
		ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{"classpath:spring.xml"});
	}
	
}

 运行结果:

 

 

[org.springframework.context.support.ClassPathXmlApplicationContext]Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@b0f2b2: startup date [Thu Jun 11 11:51:17 CST 2015]; root of context hierarchy
[org.springframework.beans.factory.xml.XmlBeanDefinitionReader]Loading XML bean definitions from class path resource [spring.xml]
[org.springframework.beans.factory.config.PropertyPlaceholderConfigurer]Loading properties file from class path resource [config.properties]
[org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor]JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
[org.springframework.beans.factory.support.DefaultListableBeanFactory]Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1b8dc93: defining beans [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,bean1,bean3,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy
[com.wbf.bean.Bean1]1433994678340: Bean1 Constructor
[com.wbf.bean.Bean1]1433994678347: bean1-->print()
[com.wbf.bean.Bean1]1433994678347: bean1-->test()
[com.wbf.bean.Bean2]1433994678348: Bean2 Construtor
[com.wbf.bean.Bean2]1433994678348: bean2-->test()
[com.wbf.bean.Bean3]1433994678348: Bean3 Construtor

从运行结果可以看出Spring在实例化Bean1之后马上执行了它的@PostConstruct注解的方法print()和test(),之后才去实例化Bean3。其中Bean2没有被Spring IOC容器管理。

 

三、补充说明

@PostConstruct注解Bean中的某些方法,可以用在服务器启动时的做一些初始化工作。

 

 

分享到:
评论

相关推荐

    @PostConstruct注解用来获取springbean对象.txt

    获取springbean对象

    @PostConstruct 和 @PreDestroy 使用

    在Java世界中,`@PostConstruct` 和 `@PreDestroy` 是两个非常重要的注解,它们主要用于管理组件的生命周期,特别是在使用Spring框架或者Java EE应用中。这两个注解是JSR 250规范的一部分,提供了对bean初始化和销毁...

    Spring定时任务中@PostConstruct被多次执行异常的分析与解决

    在Spring框架中,`@PostConstruct` 是一个用于标记初始化方法的注解,该方法会在对象完全初始化并准备好服务之前调用。然而,在Spring定时任务(如使用`@Scheduled`注解的方法)中,如果遇到`@PostConstruct`被多次...

    Spring注解@Component、@Repository、@Service、@Controller区别.doc

    Spring 注解@Component、@Repository、@Service、@Controller 区别 在 Spring 框架中,@Component、@Repository、@Service、@Controller 是四个常用的注解,它们都是继承自 @Component 注解,用于标注不同的组件或 ...

    SpringBoot @PostConstruct原理用法解析

    @PostConstruct 注解是 Spring 框架的一个重要组件,主要用于在 Bean 初始化之前执行某些操作。今天,我们将深入探讨 @PostConstruct 的用法和原理,并通过示例代码来演示其应用场景。 @PostConstruct 的原理 -----...

    spring注解注入示例详解.pdf

    Spring提供了多种注解来帮助开发者实现依赖注入,其中包括@Autowired、@Qualifier、@Resource以及@PostConstruct等。下面将详细介绍这些注解的使用方法和区别。 1. @Autowired注解 @Autowired是Spring提供的注解,...

    源码深入解析spring 的初始化方法 initMethod (标有注解的@postConstruct的方法)–极度细致!

    @postConstruct 所标注的方法 内部是靠的spring提供的两个后置处理器(InitDestroyAnnotationBeanPostProcessor 和 CommonAnnotationBeanPostProcessor)共同 协调分布处理完成的。 这2点也是网上绝大部人没讲明白的...

    Spring实战之使用@POSTConstruct和@PreDestroy定制生命周期行为操作示例

    3. 在 `Chinese` Bean创建完成后,Spring会调用 `@POSTConstruct` 注解的方法 `init()`,执行初始化操作。 4. 当应用关闭或者Bean被移除时,Spring会调用 `@PreDestroy` 注解的方法 `close()`,执行清理工作。 这种...

    spring3注解详细

    # Spring 3 注解详解 在 Spring 3 中,注解成为了主要的配置方式,极大地简化了应用程序的配置。本文将详细介绍几个关键的注解,包括 @Autowired、@Qualifier、@Resource 和 @PostConstruct,以及它们在实际开发中...

    Spring注解 - 52注解 - 原稿笔记

    注解包含: 拦截器 , 过滤器 , 序列化 , @After , @AfterReturning , @AfterThrowing , @annotation , @Around , @Aspect , @Autowired , @Bean , @Before , @Component , @ComponentScan , @ComponentScans , @...

    最简单的一个spring注解实例

    本实例将深入探讨Spring中的注解使用,特别是如何创建一个最简单的Spring注解实例。 首先,我们需要了解Spring的核心组件——Spring容器,也称为ApplicationContext。这个容器负责管理应用程序中的bean,包括它们的...

    Spring 注解 小例子

    在Spring框架中,注解是一种强大的工具,它简化了配置并增强了代码的可读性。Spring注解的主要目的是消除XML配置...Spring注解的强大之处在于它们的灵活性和组合能力,使得开发者能够根据需求定制化应用的配置和行为。

    Spring @compenent注解详解

    在Spring框架中,`@Component`注解是核心的组件注解之一,它标志着一个类作为Spring IoC容器中的Bean。这个注解及其派生注解(如`@Service`、`@Repository`和`@Controller`)是Spring依赖注入(Dependency Injection...

    对Spring中注解怎么实现的一些基本原理

    本文将深入探讨Spring注解的基本原理,包括它们如何被解析、处理以及如何影响应用程序的生命周期。 首先,我们需要了解注解在Java语言中的本质。注解是一种元数据,允许程序员在源代码中嵌入信息,这些信息可以被...

    14、加载spring启动首先进入的类方法注解1

    本文将详细讨论在Spring中使用`@PostConstruct`和`@PreDestroy`注解以及`InitializingBean`和`DisposableBean`接口来控制Bean的生命周期。 1. **使用@PostConstruct和@PreDestroy注解** `@PostConstruct`注解标记...

    Spring框架中 @Autowired 和 @Resource 注解的区别

    在Spring框架中,注解是实现依赖注入的重要方式,其中包括`@Autowired`和`@Resource`两个常用的注解。它们虽然都可以用来注入依赖,但在实际使用中存在一些区别。 首先,`@Autowired`注解是Spring框架特有的,主要...

    详解spring boot容器加载完后执行特定操作

    Spring Boot 框架提供了多种方式来执行容器加载完成后的特定操作,例如使用 ApplicationListener 接口或使用 @PostConstruct 注解。在本文中,我们将介绍使用 ApplicationListener 接口来执行容器加载完成后的特定...

    spring注解实例

    本资源包“spring注解实例”聚焦于Spring框架的注解编程模型,特别是与SSH2(Struts、Spring、Hibernate)集成的场景。SSH2是一个经典的Java Web开发栈,其中Spring作为MVC框架和依赖注入容器,而Struts处理表现层,...

    spring的注解

    - **控制层**:`@Controller`,用于标注控制层组件,它是Spring MVC的核心注解之一,负责处理用户的请求并将数据传递给视图层。 - **服务层**:`@Service`,用于标注业务逻辑组件,通常用于处理复杂的业务逻辑。 - *...

    spring注解1

    本文将详细讲解Spring中的几个关键注解:`@Autowired`、`@Qualifier`、`@Resource`以及`@PostConstruct`和`@PreDestroy`。 1. `@Autowired` `@Autowired`注解用于自动装配bean,它可以应用在字段、方法或构造器上,...

Global site tag (gtag.js) - Google Analytics