这篇文章主要是对action,dao和service在spring中的配置,在本项目当中会有多个action,action也比较复杂,action中有很多相同的代码,所以考虑了使用一个BaseAction,之后的action都要继承这个BaseAction,在spring中的配置就比较简单了,例如:
<bean id="baseAction" class="com.action.BaseAction" abstract="true"> <property name="authenticationFactory" ref="authenticationFactory" /> </bean> <bean id="testAction" class="com.action.TestAction" parent="baseAction" scope="prototype"></bean> 在上面用到了authenticationFactory这个引用,这个是配置在service当中的,那问题是如何在action中引用到此service,这是我们需要将这几个配置文件都在web.xml文件当中使用contextConfigLocation这个param-name属性配置将这些文件在应用启动时就加载初始化这些配置文件,这样在整个应用的过程当中都能使用配置文件当中的相关配置。如果某个action引用到别的service,可以根据以上配置来进行相应的引用。
接下来配置service,service的配置就是对一些service类的注入,在本项目当中操作数据库是使用面向接口方式来操作的,即分别写一个service的接口定义需要操作的方法和一个dao接口定义需要对数据库操作的增删改查,然后分别实现这两个接口,dao的实现类对后台的数据库进行操作(主要还是通过之前封装好的DaoSupport类来操作),然后在service的实现类当中引用dao的实现类以实现数据操作。这样的话在service的配置当中必然会引用到dao,如下:
<bean id="clubService" class="com.service.impl.ClubServiceImpl"> <property name="dao1" ref="dao1" /> <property name="dao2" ref="dao2" /> ..... </bean>那么这里的ref在哪里配置呢?这是我们再独立出来一个配置文件,主要是对于dao的配置,上面说到dao是直接操作数据库的,那么数据库的配置必然需要在dao的配置文件当中体现以实现数据库配置的作用。例如:
<import resource="database/databaseContext.xml"/><!--dataBaseContext.xml文件时上文说到的关于hibernate,事务,spring的那个配置文件--> <bean id="daoSupport" class="com.dao.DaoSupport" abstract="true"> <property name="slaveHibernateTemplate" ref="slaveHibernateTemplate" /> </bean> <bean id="daoGameSF" parent="daoSupport"> <property name="sessionFactory" ref="gameSessionFactory" /> </bean><bean id="userTokenDao" class="com.dao.core.impl.UserTokenDaoImpl" parent="daoGameSF"></bean><!--这里的userTokenDao就是上面service中ref的值,其他根据具体情况来配置就行了--> 这样配置之后其实就把dao和数据库之前联系起来了,达到了dao对数据库的事务控制了。
相关的配置基本上已经完成了,但是之前说到的mysql主从切换类我们还没有对它进行配置,不配置是起不到什么作用的,在这里配置如下:
<bean id="masterSlaveAdvice" class="com.interceptor.MasterSlaveAdvice"> <property name="enabled" value="true" /> </bean> <bean id="cacheAdvice" class="com.interceptor.CacheAdvice"><!--此类是关于memcache的缓存处理的类,在这里就不解释了--> <property name="enabled" value="true" /> <property name="printCacheLog" value="true" /> </bean> <bean class="org.springframework.aop.aspectj.AspectJExpressionPointcutAdvisor"> <property name="advice" ref="serviceAdvice" /> <property name="order" value="3" /> <property name="expression"> <value> execution(* com..service..*.*(..)) </value> </property> </bean> <bean id="serviceAdvice" class="com.interceptor.ServiceMethodInterceptor"> <property name="printCostTime" value="true" /> <property name="befordMethodAdvices"> <list> <ref bean="cacheAdvice" /> <ref bean="masterSlaveAdvice" /> </list> </property> <property name="afterMethodAdvices"> <list> <ref bean="cacheAdvice" /> <ref bean="masterSlaveAdvice" /> </list> </property> </bean>这样配置之后就能够在对service操作的过程中主从切换的作用了。
至此,功能性配置文件基本上已经完成。