spring 配置完Service怎么得到Action
写一个手机发送短信的后台处理在包装短信时,今天遇到一个问题:
用的是(WebSphere, spring, hibernate)
我写完了Service后就在ssh(struts2)框架中配置了。hibernate 映射文件和spring配置文件:
但是没有在struts.xml中配置Action ,
这样就在java文件中使用了Service,
以前用ssh时候都是使用ssh框架通过依赖注入得到的Service或者是通过普通的方式new 一个Service得到的,现在就是想用spring配置后在
java类中不用spring依赖注入通过配置文件得到Service,怎么才能得到?
?
见过这种方式(可以得到但是我这老是报NUll异常找不到Service):
? mobileDataService = (MobileDataService)Framework.getEngine().getContainer().getComponent("mobileDataService");
? regionService = (RegionService)Framework.getEngine().getContainer().getComponent("regionService");
? groupToRegionService = (GroupToRegionService)Framework.getEngine().getContainer().getComponent("groupToRegionService");
说明:
mobileDataService,regionService,groupToRegionService 都是在spring中配置过的;如下
?
<bean id="mobileDataService" ref="***Manager"></property>
</bean>
<bean id="regionService" ref="****Manager"/>
? <property name="***Manager" ref="****Manager"/>
?</bean>
<bean id="groupToRegionService" ref="****Manager"/>
? <property name="***Manager" ref="****Manager"/>
?</bean>
Test.java
(不用配置Action,不用new的方式,怎么得到?)
这个问题是我从网上看来的,在这里给出下自己的思路:
1,可以通过xStream读取spring的配置文件xml,分析每个<bean>的属性(id,class)以及子节点<property>的属性(name,ref)。
2,以<bean>的id为key,class为value的Map的类型。存放系统的的工程环境中,方便全系统调用。
3,最好做到根据xml文件的最后修改时间,时时动态加载,基本原理:每次读取Map时,判断文件最后的修改时间和上一次的修改时间是否一致
,不一致则重新装载Map。
4,在系统的工程环境类中,定义统一的调用service的入口,入参为<bean>的id值,出参为object。
形如:public static Object getServiceCaseByBeanId(String beanId);
通过Java反射机制,生成class对应类的实例,返回给调用者。
4,当每个action层,需要使用service的实例对象时,只需要知道该service接口(类)的<bean>的id,即可取得该类的实例。