前期工作
我们建立三层架构:表现层,业务层和持久层
持久层通过dao接口完成对数据库的交互
通过实现类完成功能的实现
业务层通过service接口完成业务需求
业务层实现类
表现层调用service接口
我们可以看到业务层对持久层,表现层对业务层有着依赖
利用工厂模式解耦
我们创建一个Bean工厂,Bean在计算机英语里有可重用组件的意思,bean工厂就是创建dao和service对象的工厂
配置文件可以是xml,也可以是properties,这里我们采用properties,我们在resources里创建properties配置
然后我们在bean工厂里面初始化properties,这里我们使用静态代码块
需要注意的是InputSteam的实例化不能用new关键字,因为web服务上线后就没有src文件夹了,也不能用绝对路径,因为每台机子都不一样。这里采用的是利用bean工厂的类加载器的getResourceAsStream方法获取流对象,里面的路径是从classpath开始的。
然后我们来写getBean方法,该方法可以通过bean的名称获取bean对象,这里根据beanName和properties的key-value配置获取beanPath也就是全限定类名,再通过class.forName反射的机制获取bean对象。
建立好工厂之后,我们就可以利用工厂解耦,我们来看表现层对accountService的依赖,我们就可以利用工厂生产IAccountServiceImpl类的实现类AccountServiceImpl
同样的,业务层对持久层的依赖也可以通过工厂模式解耦
我们运行一下,奈斯~