Spring依赖其IOC特征
轻松的管理着一堆非常有价值的bean
这些bean在spring容器中的依赖关系都已注入好
所以相互调用非常方便
但既然是有价值的bean我们就想在Java代码的各处都能调用实际中的确有这样的场景比如
Struts的action要用其中的service;
充血领域模型的Hibernate实体会需要dao
要调用这些bean现在也确实有很多做法
以下代码描述的方式被称为bad smell是最不自然的方式不被提倡;
JDBCDao jdbcDao = (JdbcDao)springContextgetBean(jdbcDao);
自然的调用方式是你调用的bean也是注入的
struts是通过一个spring plugin来做到的;
hibernate就没那么简单了要用到annotation声明要什么ASPectJ织入概念复杂麻烦之极;
我有一个简单的做法至少对单件的bean很可行(一般我们需要的bean也就是单件的)思路很简单依靠spring的注入机制把容器内的bean注入为静态变量而静态变量天然就是各处可用的以下是代码
Java:
public class JdbcDao{
//静态变量
privatestaticJdbcDao instance;
//静态方法获取单件对象
publicstaticJdbcDaoget(){
returninstance;
}
//对象方法注入到静态变量
publicvoidsetInstance(JdbcDao_inst){
instance=_inst;
}
publicListquery(Stringsql){
}
}
spring配置将自身注入
<beanid=jdbcDaoclass=netjackerdaoJdbcDao>
<propertyname=instance>
<refbean=jdbcDao/>
</property>
</bean>
这样只要spring容器启动构造好bean后就会自行将其注入到静态变量然后在各处的调用就很简单了
publicclassUserAction{
JdbcDaojdbcDao=JdbcDaoget();
publicStringexecute(){
jdbcDaoquery();
}
}
注网上有一些思路也是从静态变量入手的但做法有所不同有的需要依赖Web容器就不多做介绍了
最后要说的就是这也是单件模式的一种实现使用spring容器配置注入好你的单件对象并在任何地方使用之