Spring 2.有诠释的配置文件中各层配置详解
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="configLocation" <!--1.数据源层-->
value="classpath:hibernate.cfg.xml">
<!-- 使用了注释将数据源连接上,并生成了对象sessionFactory -->
</property>
</bean>
<!-- 公司注册DAO-->
<bean id="bspcorpdao" class="com.bsp.dao.BspCorpDAOImpl">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<!-- 用户注册DAO-->
<bean id="bspuserdao" class="com.bsp.dao.BspUserDAOImpl">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<!-- 认证公司DAO-->
<bean id="bspcorpspldao" class="com.bsp.dao.BspCorpSplDAOImpl">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<!-- 联系人DAO-->
<bean id="bspmysplcontactdao"
class="com.bsp.dao.BspMySplContactDAOImpl">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<!-- 公告信息DAO-->
<bean id="bspmessagedao" class="com.bsp.dao.BspMessageDAOImpl">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<!-- 公告信息DAO-->
<bean id="dao" class="com.bsp.action.REG_CORP_ADMIN1Action">
<property name="managerfactory"> <!--3.DAO操作数据层-->
<ref local="managerfactory" />
<!--1.使用了数据源类对象。-->
<!-- ?where's managerfactory ,2.此为包是所有务逻辑的管理器,业务逻辑又使用了dao类-->
</property>
</bean>
<!-- 询价单DAO-->
<bean id="bspinqdao" class="com.bsp.dao.BspInqDAOImpl">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<!-- 询价单涉及部件DAO-->
<bean id="bspinqpartsdao" class="com.bsp.dao.BspInqPartsDAOImpl">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<!-- 供应商收到询价记录DAO-->
<bean id="bspinqspldao" class="com.bsp.dao.BspInqSplDAOImpl">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<!-- 账户事务逻辑层注入DAO层组件 -->
<bean id="accountmanager" class="com.bsp.service.AccountManagerImpl">
<property name="bspuserdao"> <!-- use LoginAction DAO -->
<ref local="bspuserdao" />
</property>
<property name="bspcorpdao">
<ref local="bspcorpdao" />
</property>
<property name="bspcorpspldao">
<ref local="bspcorpspldao" />
</property>
<property name="bspmysplcontactdao">
<ref local="bspmysplcontactdao" />
</property>
</bean>
<bean id="messagemanager" class="com.bsp.service.MessageManagerImpl">
<property name="bspmessagedao">
<ref local="bspmessagedao" />
</property>
</bean>
<bean id="inqmanager" class="com.bsp.service.InqManagerImpl">
<property name="bspinqdao">
<ref local="bspinqdao" />
</property>
<property name="bspinqpartsdao">
<ref local="bspinqpartsdao" />
</property>
<property name="bspinqspldao">
<ref local="bspinqspldao" />
</property>
</bean> <!--3.特定业务逻辑层-->
<!--1.具体业务类使用了dao对象;2.定义了统一管理他们的管理类,注入业务业务逻辑类对象-->
<!-- 工厂服务层注入事务逻辑层组件 -->
<bean id="managerfactory" class="com.bsp.service.ManagerFactory">
<property name="accountmanager">
<ref local="accountmanager" />
</property>
<property name="messagemanager">
<ref local="messagemanager" />
</property>
<property name="inqmanager">
<ref local="inqmanager" />
</property>
</bean>
<!--2.数据持久的事务管理层-->
<!--1.定义事务管理器,使用数据源对象 2.配置事务拦截器,注入了管理器对象,并定义DML事务传播属性-->
<!--3.定义BeanNameAutoProxyCreator,为指定的dao类自动添加事务拦截器-->
<!-- 事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<!-- 配置事务拦截器-->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 事务拦截器bean 需要依赖注入一个事务管理器-->
<property name="transactionManager">
<ref local="transactionManager" />
</property>
<property name="transactionAttributes">
<!-- 下面定义事务传播属性-->
<props>
<prop key="save">PROPAGATION_REQUIRED</prop>
<prop key="dele*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED</prop>
<prop key="query">PROPAGATION_REQUIRED</prop>
<prop key="valid">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!--定义BeanNameAutoProxyCreator ,该bean 是个bean 后处理器,无须被引用,因此
没有id 属性
这个bean 后处理器,根据事务拦截器为目标bean 自动创建事务代理-->
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!--指定对满足哪些bean name 的bean 自动生成业务代理-->
<property name="beanNames">
<!-- 下面是所有需要自动创建事务代理的bean-->
<list>
<value>bspcorpdao</value>
<value>bspuserdao</value>
<value>bspcorpspldao</value>
<value>bspmysplcontactdao</value>
<value>bspmessagedao</value>
<value>bspinqdao</value>
<value>bspinqpartsdao</value>
<value>bspinqspldao</value>
</list>
<!-- 此处可增加其他需要自动创建事务代理的bean-->
</property>
<!--下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
<!-- 此处可增加其他新的工nterceptor-->
</list>
</property>
</bean>
<!--4.action页面控制层-->
<!-- 1.使用了统一的managerfactory对象实现统一接口 -->
<!-- why use that's name标识,上面name 是为了注释中的namespace下的Action value下注入对象处理页面控制 -->
<!-- Struts动作控件器Bean设置 -->
<!-- 用户登录验证,注意,Spring2.0单实例模式的设置改成了scope,而在2.0以前是singleton-->
<bean name="logonAction" class="com.bsp.action.LogonAction"
scope="prototype">
<property name="managerfactory">
<ref local="managerfactory" />
</property>
</bean>
<!-- 公司及管理员注册 -->
<bean name="/MyCountManager/REG_CORP_ADMIN1" id="UserIsReg"
class="com.bsp.action.REG_CORP_ADMIN1Action" scope="prototype"><!-- why use that's name标识 -->
<property name="managerfactory"> <!-- 上面name 是为了注释中的namespace下的Action value下注入对象处理页面控制 -->
<ref local="managerfactory" />
</property>
</bean>
<!-- 普通用户注册 -->
<bean name="/MyCountManager/REG_CORP_USER"
class="com.bsp.action.REG_CORP_USERAction" scope="prototype">
<property name="managerfactory">
<ref local="managerfactory" />
</property>
</bean>
<!-- 用户注册 -->
<bean name="/MyCountManager/BSP_User_Reg" id="BSPUserReg"
class="com.bsp.action.BSP_User_RegAction" scope="prototype">
<property name="managerfactory">
<ref local="managerfactory" />
</property>
</bean>
<!-- 用户找回密码-->
<bean name="BSP_User_GetPass"
class="com.bsp.action.BSP_User_GetPassAction" scope="prototype">
<property name="managerfactory">
<ref local="managerfactory" />
</property>
</bean>
<!--显示己注册的公司信息-->
<bean name="USERREG"
class="com.bsp.action.USERREGAction" scope="prototype">
<property name="managerfactory">
<ref local="managerfactory" />
</property>
</bean>
<!--显示己认证公司信息-->
<bean name="/MyOrderParts/BUYCERSPL"
class="com.bsp.action.BUY_CER_SPLAction" scope="prototype">
<property name="managerfactory">
<ref local="managerfactory" />
</property>
</bean>
<!--显示联系人信息-->
<bean name="/MyOrderParts/BUYSPLLIST"
class="com.bsp.action.BUY_SPL_LISTAction" scope="prototype">
<property name="managerfactory">
<ref local="managerfactory" />
</property>
</bean>
<!--公告板管理-->
<bean name="/MessageBoard/bspMessage"
class="com.bsp.action.BspMessageAction" scope="prototype">
<property name="managerfactory">
<ref local="managerfactory" />
</property>
</bean>
<!--询价管理-->
<bean name="/MyOrderParts/BUYINQEDIT" id="BUYINQEDIT"
class="com.bsp.action.BUY_INQ_EDITAction" scope="prototype">
<property name="managerfactory">
<ref local="managerfactory" />
</property>
</bean>
<!--收到询价管理-->
<bean name="/MySaleparts/SALERECINQLIST"
class="com.bsp.action.SALE_REC_INQ_LISTAction"
scope="prototype">
<property name="managerfactory">
<ref local="managerfactory" />
</property>
</bean>
</beans>
在有注释的Action类中如下:
@Namespace("/MyCountManager")
public class REG_CORP_ADMIN1Action extends BaseAction {
private static final long serialVersionUID = 1L;
REG_CORP_ADMIN1VO regcorpadmin;//管理员注册VO
public void setRegcorpadmin(REG_CORP_ADMIN1VO regcorpadmin) {
this.regcorpadmin = regcorpadmin;
}
public REG_CORP_ADMIN1VO getRegcorpadmin() {
return this.regcorpadmin;
}
public String UserIsReg(String uid) {//判断用户是否已注册,供DWR调用
if (this.managerfactory.getAccountmanager().findByUserId(uid) != null) {
return "yes";
}
return "no";
}
public String CorpIsReg(String cid) {//判断企业是否已注册,供DWR调用
if (this.managerfactory.getAccountmanager().findByCorpId(cid) != null) {
return "yes";
}
return "no";
}
@Action(value = "REG_CORP_ADMIN1",
results = { @Result(name = "input", location = "/MyCountManager/REG_CORP_ADMIN1.jsp") })
public String execute() {..........}
}
<!--5.客户表现层--->
<!--略,因为spring配置文件中没有-->