日期:2014-05-20  浏览次数:20729 次

Spring怎么依赖注入
Spring+Struts时,Struts的action的类交由Spring管理,启动项目后,调用action时,Spring就自动注入了需要的对象


现在我不使用Struts,想在类里面注入对象
必须
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(new String[] {"spring.xml"});
Example example = (Example)appContext.getBean("example");
获得Example的对象
如果有多个类的话、是不是每个类里面都有如上的代码啊、应该怎么配置才能自动的注入对象呢?



------解决方案--------------------
你看看spring和hibernate、struts的整合,其中讲的非常清楚
还有spring是通过反射机制实现,所以你应该去理解原理,知道原理之后你就好明白
------解决方案--------------------
我也刚学spring ,我谈谈我的理解,如果有错的地方,请指出,共同学习。


ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(new String[] {"spring.xml"}); 
Example example = (Example)appContext.getBean("example"); 
你这个代码可以知道你“spring.xml”的代码就有
<beans>
<bean id="example" class="``````">
</beans>

如果有多个类,那xml肯定就有多个<bean>

如果类之间没关系,就体现不出Spring的有点。就只是不用new了。

依赖注入主要是注入,
你看下面的代码,dao,biz,action,
在dao这个类里,要把sessionFactory注入进入

TblUserBiz,要把TblUserDAO注入进入,

·······等等··
当我们要一个biz的时候
ApplicationContext cont = new ClassPathXmlApplicationContext("applicationContext.xml"); 
UserImpl u = (UserImpl) cont.getBean("TblUserBiz");

这样就行了,就不用在new一个dao,spring 就会自动把TblUserDAO注入进入,

因为,com.yangtianb.biz.UserImpl这个biz类里有个setTbluser方法,


private TblUserDaoImpl tblusedao = null;

public void setTbluser(TblUserDaoImpl tbluser) {
this.tblusedao = tbluser;
}

其实我认为框架就是反射,注入就是反射了,它的set方法,当然也有构造方法,

当类多了,关系复杂了,spring的优点就体现出来了。


<!-- Dao -->
<bean id="TblUserDAO" class="com.yangtianb.dao.TblUserDaoImpl">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- biz -->
<bean id="TblUserBiz" class="com.yangtianb.biz.UserImpl">
<property name="tbluser" ref="TblUserDAO"></property>
</bean>
<!-- actin -->
<bean name="/tblUser" class="com.yangtianb.web.action.TblUserAction">
<property name="userbiz" ref="TblUserBiz"></property>
</bean>








------解决方案--------------------


对 我想 只有这样了 每个类都加上它 ,但可以把这个做个工厂 啊,

和struts 是没关系的 你以前怎么注入 先在就怎么注入呗;;


------解决方案--------------------
引用楼主 trwhoya 的帖子:
获得Example的对象
如果有多个类的话、是不是每个类里面都有如上的代码…

------解决方案--------------------
呃。。你用struts几? 如果是struts2,直接在spring的配置文件里面配置好DAO的bean,然后在Action中属性加入要注入的DAO,并设置seter方法就OK了。

------解决方案--------------------
用Structs等web框架时,可以通过配置web.xml将spring和struts等关联的。
对于单独的应用程序,当然需要手动的将spring配置文件导入了,不过也不需要每个类都加上那一段。
可以写一个工具类的静态方法,一次将文件读到一个静态的变量中,这样就不用每次都去读文件了。