`
irfen
  • 浏览: 202892 次
  • 性别: 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方法只要不设置为静态的就可以了。

相关推荐

    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. 简介 ...

    最新Java面试宝典pdf版

    12、静态变量和实例变量的区别? 12 13、是否可以从一个static方法内部发出对非static方法的调用? 12 14、Integer与int的区别 13 15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 13 16、下面的代码有...

    Java面试宝典2010版

    12、静态变量和实例变量的区别? 13、是否可以从一个static方法内部发出对非static方法的调用? 14、Integer与int的区别 15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 16、下面的代码有什么不妥之...

    asp.net知识库

    一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标放在一个连接上,会显示图片(类似tooltip) 使用microsoft.web.ui.webcontrols的TabStrip与...

    Java面试笔试资料大全

    12、静态变量和实例变量的区别? 12 13、是否可以从一个static方法内部发出对非static方法的调用? 12 14、Integer与int的区别 13 15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 13 16、下面的代码有...

    JAVA面试宝典2010

    12、静态变量和实例变量的区别? 12 13、是否可以从一个static方法内部发出对非static方法的调用? 12 14、Integer与int的区别 13 15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 13 16、下面的代码有...

    Java面试宝典-经典

    12、静态变量和实例变量的区别? 12 13、是否可以从一个static方法内部发出对非static方法的调用? 12 14、Integer与int的区别 13 15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 13 16、下面的代码有...

    java面试题大全(2012版)

    12、静态变量和实例变量的区别? 12 13、是否可以从一个static方法内部发出对非static方法的调用? 12 14、Integer与int的区别 13 15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 13 16、下面的代码有...

    Java面试宝典2012版

    12、静态变量和实例变量的区别? 12 13、是否可以从一个static方法内部发出对非static方法的调用? 12 14、Integer与int的区别 13 15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 13 16、下面的代码...

    java面试宝典2012

    12、静态变量和实例变量的区别? 13 13、是否可以从一个static方法内部发出对非static方法的调用? 13 14、Integer与int的区别 13 15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 14 16、下面的代码有...

    Java面试宝典2012新版

    12、静态变量和实例变量的区别? 12 13、是否可以从一个static方法内部发出对非static方法的调用? 12 14、Integer与int的区别 13 15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 13 16、下面的代码有...

    Java 面试宝典

    12、静态变量和实例变量的区别? ............................................................................. 12 13、是否可以从一个 static 方法内部发出对非 static 方法的调用? ...........................

Global site tag (gtag.js) - Google Analytics