`
irfen
  • 浏览: 204857 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring 注入静态变量 解决方案(之我见)

阅读更多

发表自本人博客  http://irfen.me

 

先说下我现在使用的版本:Spring3.0 annotation写的

今天写项目遇到了一个问题:想通过jstl自定义函数来实现页面上面的一部分内容。通过Spring注入后发现报如下错误:

@Resource annotation is not supported on static fields

上网搜寻发现,Spring注解注入不支持静态变量注入,遂想办法解决。

 

首先看到的方法是有一个

<bean id=”userService” 
 class=”bookstore.service.UserService” 
 init-method=”init” destroy-method=”destroy”> 
    …
</bean> 

 

这样的方法,通过编写一个方法init(),然后通过xml配置 init-method=”init” ,在init方法中从取值赋成静态的,但是我不想写xml,毕竟项目里主要用的都是annotation方式,于是发现如下两个注解:

@PostConstruct 和 @PreDestroy

一个是在初始化之后调用,一个是在摧毁之前调用。这样就可以使用的。

我在junit下做了测试,就不发项目代码了,代码如下:

@Resource
private HibernateTemplate hibernateTemplate;

private static TalentsDaoImplTest td;

@PostConstruct
public void init() {
  td = this;
  td.hibernateTemplate = this.hibernateTemplate;
}

@Test
public void testStatic() {
  Talents talents = td.hibernateTemplate.get(Talents.class, 1L);
  System.out.println(talents.getAge());
}

 

 

发这篇只是发现,可能是这个问题出现的或者是使用的人比较少,但是这个解决方案真的不太好找,我就总结下来,希望可以给大家提供帮助。

还有就是我这样是可以解决了,不知道大家是否还有更好的解决办法,欢迎大家共同来分享。

 

发表自本人博客  http://irfen.me

5
3
分享到:
评论
8 楼 Doublecqw 2016-06-22  
作者的这种写法.我也想到过.不过效率太低.你们可以测下.
7 楼 huangyufa123 2015-07-31  
firefly.li 写道
不用这么麻烦,注入静态变量时,set方法只要不设置为静态的就可以了。

都是注解怎么配置
6 楼 yuelangyc 2015-07-27  
firefly.li 写道
不用这么麻烦,注入静态变量时,set方法只要不设置为静态的就可以了。

1楼正解,想让一个静态变量从配置文件中获取,采用1楼的方法成功。

public class PropertiesOfService {

	private static String wws;

	public void setWws(String wws) {
		PropertiesOfService.wws= wws;
	}

	public static String getWws() {
		return wws;
	}

}

5 楼 a1117chenbo 2015-01-13  
找了好多资料都没找到解决方法,直到看到这个博客  
4 楼 MrLee23 2014-12-15  
恩,这个解决方案可以满足java进程开发。
我之前是把静态类也当作一个bean进行注入,其实原理和你这个是一样的。
3 楼 Reset 2012-08-29  
		<property name="outputParams">
			<map>
				<entry key="oSummary_Info"><util:constant  static-field="java.sql.Types.VARCHAR"/></entry>
				<entry key="oInfo"><util:constant static-field="oracle.jdbc.OracleTypes.CURSOR"/></entry>
				<entry key="oResult"><util:constant static-field="java.sql.Types.NUMERIC"/></entry>
			</map>
		</property>
2 楼 irfen 2012-04-16  
firefly.li 写道
不用这么麻烦,注入静态变量时,set方法只要不设置为静态的就可以了。

好像也是啊、当时查看了好多资料都没有找到怎么解决,然后想到了这样的方法,确实是直接把set方法变成init那个就行了
1 楼 firefly.li 2012-04-12  
不用这么麻烦,注入静态变量时,set方法只要不设置为静态的就可以了。

相关推荐

    static静态变量使用@Value注入方式.md

    通过上述分析和示例,我们可以看到,在Spring框架中,虽然不能直接使用`@Value`注解为静态变量注入值,但可以通过定义一个非静态方法并使用`@Value`注解来间接实现这一目标。这种方法不仅避免了潜在的警告和错误,还...

    spring static静态方法里面注入bean空指针解决

    然而,静态方法和静态变量不参与Spring的生命周期管理,因此,尝试在静态字段或静态方法中直接使用`@Autowired`注入Bean会导致空指针异常,因为Spring容器不会初始化静态成员。 **解决方法1:使用@Component和非...

    多线程Autowire注入null的解决方案.docx

    多线程Autowire注入null的解决方案 在 Spring 项目中,多线程 Autowire 注入 null 的问题是一个常见的问题。当我们在多线程中使用 @Autowired 注解时,可能会出现 null 的情况。这是因为多线程是防注入的,容器中的...

    Spring学习思维导图

    Spring是一个轻量级的JavaEE解决方案,它解决了EJB的问题,如运行环境苛刻、移植性差等。Spring的本质是一个工厂加配置文件,通过工厂设计模式来解决耦合问题。 一、工厂设计模式 工厂设计模式是解决耦合问题的一...

    Spring常见面试题

    设计模式是解决特定问题的一种通用解决方案, Spring框架中大量使用了设计模式。学习设计模式可以帮助我们更好地理解Spring框架的实现原理和编程思想。常见的设计模式有: * 创建型:单例模式、工厂方法、抽象工厂...

    spring下实现MQ

    在Spring框架下实现消息队列(MQ)服务,可以极大地简化JMS(Java Message Service)的集成和管理,提供更高效、可维护的解决方案。本文将深入探讨如何使用Spring结合MQ6.0来实现JMS异步通信,并比较Spring与传统JMS...

    spring 入门教程

    ### Spring入门教程详解 ...总之,Spring框架为Java开发者提供了一个强大且灵活的平台,无论是构建企业级后端服务还是Web应用程序,Spring都能提供一套完整的解决方案,极大地提高了开发效率和代码质量。

    ssh 整合注入,教训,注入,为空

    在《spring注入教训.txt》这个文件中,很可能详细记录了作者在Spring框架中遇到的注入问题及其解决方案。Spring框架以其依赖注入(DI)和面向切面编程(AOP)特性著称,但在使用DI时,如果不正确地管理bean的生命...

    Spring-Reference_zh_CN(Spring中文参考手册)

    9.9. 公共问题的解决方案 9.9.1. 对一个特定的 DataSource 使用错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用JDBC进行数据访问 11.1. 简介 ...

    thymeleaf页面静态化springboot

    1. 微服务架构:在Spring Cloud中,Thymeleaf可以作为服务端渲染的解决方案,与API Gateway配合,提供完整的前后端分离应用。 2. 模板统一:在分布式环境中,Thymeleaf可确保所有微服务的视图层保持一致,便于维护和...

    spring jsp freemaker sitemesh

    Spring是一个开源的Java平台,它提供了全面的企业级应用开发解决方案,包括依赖注入(Dependency Injection, DI)、面向切面编程(Aspect-Oriented Programming, AOP)、数据访问、事务管理等。Spring框架的核心是...

    如何解决redisTemplate注入为空问题

    4. 静态工具类:静态工具类是一种常见的编程模式,但是,在 Spring 中,静态工具类不能被 Spring 容器管理,因为静态成员变量不能被注入。 5. Bean 的生命周期:在 Spring 中,Bean 的生命周期是指 Bean 的创建、...

    spring-framework-3.1.0.M2-with-docs 3-3

    示例项目则提供了一个实战环境,让开发者能够直接看到Spring框架在实际应用中的实现,从而学习到最佳实践和常见问题的解决方案。 "3-3 源代码"对于想要深入研究Spring框架内部工作原理的开发者来说尤其宝贵。通过...

    一个改进版的spring-mvc-showcase

    在博文链接中,我们可以推测作者分享了关于该项目的详细信息和经验,包括如何设置、运行以及可能遇到的问题和解决方案。遗憾的是,具体的博客内容没有提供,所以我们只能根据常规的Spring MVC项目结构和常见实践来...

    spring mvc+freemaker 开发实例

    Spring MVC是Spring框架的一部分,它提供了一个用于构建MVC(Model-View-Controller)结构的轻量级、灵活的解决方案,而FreeMarker则是一个模板引擎,主要用于生成动态网页内容。在这个"spring mvc+freemaker 开发...

    spring教程

    Spring框架是Java领域内最为流行和广泛使用的开源应用框架之一,其核心功能是基于依赖注入(DI)和面向切面编程(AOP)来构建应用程序。Spring框架的特点包括声明式事务管理、事件模型以及提供了一系列可复用的组件...

    SSH框架和FreeMarker动态网页生成静态技术

    SSH框架,全称为Struts2、Spring和Hibernate的集成框架,是Java开发Web应用时常用的一种解决方案。这个框架集合了Struts2的MVC模式、Spring的依赖注入和事务管理以及Hibernate的对象关系映射功能,提供了高效且灵活...

    Struts2+Spring2.5+hibernate3.2+freemarker

    总之,"Struts2+Spring2.5+Hibernate3.2+Freemarker"的组合为Java Web开发提供了一个强大且灵活的解决方案,通过整合这些框架,开发者可以更专注于业务逻辑,而无需过于关注底层的细节。对于初学者来说,理解并掌握...

    Spring+Freemarker 使用163发HTML格式的邮件

    它提供了一种依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)的解决方案,帮助开发者管理应用的组件和生命周期。 **Freemarker模板引擎** Freemarker是一个基于模板的、...

    springboot用thymeleaf模板引擎

    SpringBoot与Thymeleaf模板引擎的整合是现代Java Web开发中的常见实践,它为开发者提供了便捷的MVC(Model-View-Controller)框架支持,...无论是小型项目还是大型企业级应用,这种组合都能提供稳定且高效的解决方案。

Global site tag (gtag.js) - Google Analytics