业务逻辑组件分为接口和实现类两个部分。
接口用于定义业务逻辑组件,定义业务逻辑组件必须实现的方法是整个系统运行的核心。通常按模块来设计业务逻辑组件,每个模块设计一个业务逻辑组件,并且每个业务逻辑组件以多个DAO(Data Access Object)组件作为基础,从而实现对外提供系统的业务逻辑服务。增加业务逻辑组件的接口,是为了提供更好的解耦,控制器无须与具体的业务逻辑组件耦合,而是面向接口编程。
1.业务逻辑组件的实现类
业务逻辑组件以DAO组件为基础,必须接收 Spring容器注入的DAO组件,因此必须为业务逻辑组件的实现类提供对应的 setter方法。业务逻辑组件的实现类将DAO组件接口实例作为属性(面向接口编程),而对于复杂的业务逻辑,可能需要访问多个对象的数据,那么只需在这个方法里调用多个DAO接口,将具体实现委派给DAO完成。
2.业务逻辑组件的配置
由于业务逻辑组件的DAO组件从未被初始化过,那么业务方法如何完成?DAO组件初始化是由 Spring的反向控制(Inverse of Control,IoC)或者称为依赖注入(Dependency Injection,DI)机制完成的。为此,还需要在applicationContext.xm1里面配置FacadeManager组件。定义FacadeManager组件时必须为其配置所需要的DAO组件,配置信息表示Base-Manager继承刚才配置的事务代理模板。并且由容器给BascManagcr注入DAO的组件,即BaseDA0Hibernate。而 target 则是TransactionProxy FactoryBean需要指定的属性,TransactionProxyFactoryBean负责为某个bean实例生成代理,代理必须有个目标,target 属性则用于指定目标。
当然,也可以不使用事务代理模板及嵌套 bean,而是为组件指定单独的事务代理属性,让事务代理的目标引用容器中已经存在的 bcan。applicationContext.xm1文件的源代码配置了应用的数据源和 SessionFactory等 bean,而业务逻辑组件也被部署在该文件中。
在配置文件中,采用继承业务逻辑组件的事务代理,将原有的业务逻辑组件作为嵌套bean配置,避免了直接调用没有事务特性的业务逻辑组件。
系统实现了所有的后台业务逻辑,并且向外提供了统一的Facade接口,前台Web层仅仅依赖这个Facade接口。这样,Web层与后台业务层的耦合已经非常松散,系统可以在不同的We b框架中方便切换,即使将整个Web层替换掉也非常容易。
领取专属 10元无门槛券
私享最新 技术干货