1.基本三层架构
DAO层
service层:
set注入了DAO层的UserDao类,直接调用save方法
将UserDao和UserService在applicationContext.xml里进行配置,注入到Spring容器中
web层
web层要使用servlet,首先要在pom.xml里配置上坐标,调用相关的包类
加载应用上下文对象(applicationContext.xml),创建spring容器,调用service
servlet还要在web.xml里进行注册,给一个相对路径让用户进行访问servlet
最后在tomcat里将项目发布,进行热部署,方便开发。
总结
在这个项目里,web层调用service层,service层调用DAO层,最后DAO层将方法调用输出值。
2.ContextLoaderListener监听器的分析
2.1ApplicationContext应用上下文获取方式
应用上下文对象是通过new ClasspathXmlApplicationContext(Spring配置文件)方式获取的,但是每次从容器中获得Bean时都要编写new ClassPathXmlApplicationContext,这样的弊端是配置文件被加载多次,应用上下文对象被创建多次,浪费资源。
2.2如何使用监视器实现获取应用上下文
在web项目中,可以使用ServletContextListenner监听Web应用的启动,我们可以在Web应用启动时,就加载Spring的配置文件,创建应用上下文对象ApplicationContext,再将其存储到最大的域servletContext域中,这样就可以在任意位置从域中获得应用上下文ApplicationContext对象了。
创建listen包,创建监视器对象,实现ServletContextListener接口
在web.xml中配置才能使用
servlet中获取使用监视器获取方法
运行结果,加载web项目时就创建了应用上下文对象
网页中访问/servlet结果
2.3代码优化
在2.2的代码中’applicationContext.xml‘和’app‘都是写死的参数,耦合度较高因此要在配置文件中配置,进行解耦。
在web.xm中配置全局初始化参数,name为配置名,映射applicationContext.xml
加载初始化参数并读取,保存app在ServletContext域。
'app’也是写死创建一个工具类用于返回app,人们不需要知道这个应用上下文对象的名称,直接调用方法传入ServletContext参数。