`

spring@value加载时机

阅读更多

@value是spring中一个用来注入类的成员变量的一种注解,其从配置文件中注入配置的值,需要在spring中配置下需要注入这个类PropertyPlaceholderConfigurer,有多种出入方式,如:

 

<bean id="propertyConfigurer" class="PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath*:config/*.properties</value>
			</list>
		</property>
		<property name="ignoreUnresolvablePlaceholders" value="true" />
		<property name="fileEncoding" value="UTF-8"/>
	</bean>
 @Value注入是在spring注入该类的默认构造器之后,再进行注入的。

 


使用org.springframework.beans.BeanUtils的public static <T> T instantiateClass(Constructor<T> ctor, Object... args)进行实例化@Component的类。使用这个bean工厂DefaultListableBeanFactory。

使用org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(final String beanName, final RootBeanDefinition mbd, final Object[] args)来创建这个bean的实例,mbd中是一些类似这样的数据:

scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null

默认情况下spring管理的bean都是单例。
实例构造完成之后,这个时候@Value注解就会触发,org.springframework.beans.factory.annotation。AutowiredAnnotationBeanPostProcessor的inject(Object bean, String beanName, PropertyValues pvs)这个方法就会将bean的属性注入进去了。注入属性完成后(下图第557行),spring再去加载其他的bean。@Value其实也是使用了@AutoWire的机制。

 由于spring只会在初始化时,加载这个类的构造器,如果需要修改配置文件中的值,可以通过spring上下文获取bean实例,使用set方式修改值。@Value加载中文时出现乱码,可以在PropertyPlaceholderConfigurer配置编码格式,上文的code中有调到,也可将中文改成unicode编码。

  • 大小: 26.5 KB
  • 大小: 26.7 KB
分享到:
评论

相关推荐

    spring bean的生命周期

    - **属性注入**:Spring会将依赖注入到Bean中,包括值注入(value,ref)和集合注入(list,map,props,set)。 - **初始化回调**:Spring支持两种类型的初始化回调方法,即`@PostConstruct`注解的方法和在XML中...

    浅谈Spring中的Quartz配置

    确保这些库被正确地添加到项目的类路径中,以便运行时能够正常加载和执行任务。 总的来说,通过Spring集成Quartz,我们可以轻松地创建、管理和调度定时任务,同时还能享受到Spring带来的便利性和灵活性。无论是简单...

    Spring3.0源码2

    8. **国际化(Internationalization, i18n)**:Spring 3.0支持多语言环境,`MessageSource`接口和`ResourceBundleMessageSource`类用于加载和解析消息源。 通过阅读Spring 3.0的源码,我们可以深入了解Spring是...

    02.Spring组件及aop基本使用操作1

    然而,它们的初始化时机是不同的:AOP相关的bean通常在容器启动初期创建,而业务bean在需要时才会被初始化,以实现延迟加载。 在理解了这些基本概念后,你可以进一步研究`pjp.proceed()`的源码,它是`@Around`注解...

    spring配置中<context-param> 和<init-param>的 区别

    此外,两者加载的时机也不同,`&lt;context-param&gt;` 在Servlet容器启动时加载,而 `&lt;init-param&gt;` 在相应的Servlet或Filter初始化时加载。 在实际开发中,理解并正确使用这两种参数配置可以帮助我们更好地定制和管理...

    Spring基础面试

    &lt;param-value&gt;/WEB-INF/applicationContext.xml&lt;/param-value&gt; org.springframework.web.context.ContextLoaderListener ``` 这段配置指定了 Spring 配置文件的位置,并注册了一个监听器来加载 ...

    《Spring in Action》学习点滴

    - 该配置会加载`trainingtext.properties`等资源文件,并可以通过`context.getMessage("button.submit", new Object[]{}, locale)`或XML中的`&lt;spring:message code="button.submit"/&gt;`来读取消息。 13. **事件监听...

    1000行代码读懂Spring核心

    4. **从XML中读取BeanDefinition**:使用`BeanDefinitionReader`和`XmlBeanDefinitionReader`从XML文件加载配置。 - **BeanDefinitionReader**:配置读取者。 - **XmlBeanDefinitionReader**:专门从XML文件中读取...

    spring在web.xml中和在struts中的不同配置.[收集].pdf

    两者的主要区别在于初始化时机和依赖管理的方式,Spring的WebApplicationContext通过`web.xml`监听器或过滤器进行全局初始化,而Struts2插件则在Struts2的生命周期内处理依赖注入。选择哪种方式取决于项目的具体需求...

    spring应用

    - `BeanFactory`是最基本的容器接口,它通过`ClassPathResource`和`FileSystemResource`等方式加载配置文件。 - `ApplicationContext`是更高级的容器接口,推荐使用。它支持国际化、事件发布机制,并且启动时会...

    Spring中Quartz的配置[总结].pdf

    在Spring框架中集成Quartz...总结来说,Spring与Quartz的集成使得我们可以方便地在应用中添加定时任务,通过配置文件定义任务的执行逻辑和触发时机。同时,Cron表达式的灵活性使得我们可以根据需要精确控制任务的调度。

    java 常见面试题 应届生 个人总结 仅供参考

    + 织入(Weaving):创建代理对象实现完成响应功能,植入的时机:编译时、类加载时、运行时代理织入,代理植入分为两种:jdk 代理、cglib 代理(默认),使用 JDK 代理需要实现相应的方法。 @Autowired 与 @...

    Hibernate事务管理.

    在没有Spring提供的Open Session In View(OSIV)模式下,事务处理和懒加载(lazy loading)可能会遇到挑战。 懒加载是一种优化策略,允许关联对象在需要时才从数据库加载,而不是在初始加载实体时就全部加载。这...

    SpringMvc简单入门

    - **配置**:在 `web.xml` 文件中配置 `DispatcherServlet`,包括其名称、类路径和加载时机等。 - **示例代码**: ```xml &lt;servlet-name&gt;httpInvoke-dispatcher &lt;servlet-class&gt;org.springframework.web....

    <context-param>与<init-param>的区别与作用

    2. **加载时机**:`&lt;context-param&gt;`在Web应用程序启动时被加载,而`&lt;init-param&gt;`在对应的Servlet或Filter实例化时加载。 3. **应用场景**:`&lt;context-param&gt;`常用于设置应用级配置,如框架配置、日志配置;`...

    注解是什么1

    3. **处理时机**:注解可以在三个主要阶段被处理:编译时、类加载时和运行时。这取决于注解的类型和处理器的实现。 4. **预定义和自定义**:Java标准库提供了一些预定义的注解,如`@Override`、`@Deprecated`和`@ ...

    Java面试必问.docx.zip

    4. 类加载优化:类加载的时机、静态域的初始化、类的卸载。 七、设计模式 1. 创建型模式:单例、工厂、抽象工厂、建造者、原型。 2. 结构型模式:适配器、装饰器、代理、桥接、组合、外观、享元。 3. 行为型模式:...

    reactnative的一个添加购物车动画效果控件

    你可以创建`Animated.Value`来存储动画的状态,然后用`Animated.View`包裹需要动画化的组件,并结合`Animated.spring`或`Animated.timing`函数来实现平滑的动画过渡。 3. **状态管理**:为了跟踪购物车中的项目数量...

    JavaEE面试笔试问答题.docx

    可以通过`@WebServlet(urlPatterns={"..."}, loadOnStartup=1)`来控制加载时机,通过`doGet()`/`doPost()`改变返回格式。 15. **Tomcat session配置**:在`web.xml`中设置`&lt;session-config&gt;`的`session-timeout`...

Global site tag (gtag.js) - Google Analytics