spring与web的整合

1. 整合的原理:

Spring容器随着tomcat容器ServletContext的启动而启动,并且在初始化完成后放到整个应用都可以访问的范围。

ApplicationContext随着服务器的启动而启动,可以借助与Servlet/Filter/Listener任何一个;

把创建好的ApplicationContext放到ServletContext中,整个应用范围,想怎访问就怎么访问;

spring-web-4.2.4.RELEASE.jar包中提供了Listener的支持(spring建议的方式)

WebApplicationContextUtils是Spring官方提供的一个web环境下便捷从ServletContext中获取ApplicationContext的工具类。

    2. 整合的步骤

        ● 添加依赖

      

  1. <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
  2. <dependency>
  3. <groupId>org.springframework</groupId>
  4. <artifactId>spring-web</artifactId>
  5. <version>4.2.4.RELEASE</version>
  6. </dependency>
  7. <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
  8. <dependency>
  9. <groupId>javax.servlet</groupId>
  10. <artifactId>javax.servlet-api</artifactId>
  11. <version>3.1.0</version>
  12. <scope>provided</scope>
  13. </dependency>

        ● 配置监听器,监听web项目的启动

   

  1.    <!-- needed for ContextLoaderListener -->
  2. <context-param>
  3. <param-name>contextConfigLocation</param-name>
  4. <param-value>classpath:applicationContext.xml</param-value>
  5. </context-param>
  6.  
  7. <!-- Bootstraps the root web application context before servlet initialization -->
  8. <listener>
  9. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  10. </listener>

         ● 创建servlet,在servlet中获取spring容器

  1. public class ContextServlet extends HttpServlet {
  2. private static final long serialVersionUID = 1L;
  3.  
  4. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  5. // 1. 获取spring容器
  6. // 获取servletContext域对象
  7. ServletContext servletContext = getServletContext();
  8. // web环境的spring容器
  9. WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
  10. // 2. 从容器中获取javabean对象
  11. Person person = (Person) applicationContext.getBean("person4");
  12. System.out.println(person.getUsername());
  13. response.getWriter().append("Served at: ").append(request.getContextPath());
  14. }
  15.  
  16. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  17. doGet(request, response);
  18. }
  19. }

       ● 访问servlet进行测试

  1. 浏览器访问:http://localhost:8080/ContextServlet

spring容器基于注解方式的开发

  ● 优缺点

  缺点:

1、如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大;如果按需求分开.xml文件,那么.xml文件又会非常多。总之这将导致配置文件的可读性与可维护性变得很低。

2、在开发中在.java文件和.xml文件之间不断切换,是一件麻烦的事,同时这种思维上的不连贯也会降低开发的效率。

  优点:

Spring基于注解方式的开发,通过"@XXX"的方式,让注解与Java Bean紧密结合,既大大减少了配置文件的体积,又增加了Java Bean的可读性与内聚性。

  ● 开发步骤:

    导入依赖

  1. <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
  2. <dependency>
  3. <groupId>org.springframework</groupId>
  4. <artifactId>spring-aop</artifactId>
  5. <version>4.2.4.RELEASE</version>
  6. </dependency>

    添加context命名空间的schema

     开启注解扫描context:component-scan

  1.    <!-- 开启spring的注解扫描 -->
  2. <!-- 扫描包下带注释的类及类中带注释的属性 -->
  3. <context:component-scan base-package="spring.annotation.demo"></context:component-scan>

      添加注解

Spring中和注入相关的常见注解有Autowired、Resource、Qualifier、Service、Controller、Repository、Component。

  • Autowired是自动按照类型注入,自动从spring的上下文找到合适的bean来注入

  • Resource用来指定名称注入

  • Qualifier和Autowired配合使用,指定bean的名称

  • Service,Controller,Repository分别标记类是Service层类,Controller层类,数据存储层的类,spring扫描注解配置时,会标记这些类要生成bean。

  • Component是一种泛指,标记类是组件,spring扫描注解配置时,会标记这些类要生成bean。

上面的Autowired和Resource是用来修饰字段,并做属性注入的。而Service,Controller,Repository,Component则是用来修饰类,标记这些类要生成bean。

  1. @Repository
  2. public class CarDao {
  3. public void insertCar(){
  4. System.out.println("CarDao中的insertCar的方法被调用... ...");
  5. }
  6. }
  1. @Service
  2. //@Component
  3. @Scope(value="singleton")
  4. public class CarService {
  5. // 自动按照类型注入,自动从spring上下文中找到合适的bean来注入
  6. @Autowired
  7. private CarDao carDao;
  8.  
  9. public void insertCar(){
  10. carDao.insertCar();
  11. System.out.println("CarService中的insertCar方法");
  12. }
  13.  
  14. @PostConstruct
  15. public void init(){
  16. System.out.println("init方法被调用... ...");
  17. }
  18.  
  19. @PreDestroy
  20. public void destory(){
  21. System.out.println("destory方法被调用... ...");
  22. }
  23. }

      编写测试代码

  1. public static void main(String[] args) {
  2. ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-annotation.xml");
  3. CarService bean = (CarService) applicationContext.getBean("carService");
  4. bean.insertCar();
  5. }

@Autowired + @Qualifier 结合使用:指定注入bean的名称

@Resouce注解:@Resource注解实现的效果和@Autowired+@Qualifier的效果是一样的

@Scope用于指定scope作用域的(用在类上)

@PostConstruct用于指定初始化方法(用在方法上)

@PreDestory用于指定销毁方法(用在方法上)

@Value 可以为我们的基本数据类型以及string进行属性赋值


   xml配置方式与注解方式的对比


spring与Junit整合测试

  整合后测试的优点

  整合后测试变得非常简单

  避免频繁、重复的容器加载

  整合Junit的步骤

      导入spring-test的jar包

  1. <dependency>
  2.  
  3. <groupId>org.springframework</groupId>
  4.  
  5. <artifactId>spring-test</artifactId>
  6.  
  7. <version>4.12</version>
  8.  
  9. <scope>test</scope>
  10.  
  11. </dependency>

     编写Junit整合测试类

  1. @RunWith(SpringJUnit4ClassRunner.class)//使用Junit4进行测试
  2. @ContextConfiguration("classpath:applicationContext-annotation.xml")//加载配置文件
  3. public class JunitSpringTest {
  4. @Autowired
  5. private CarService carService;
  6.  
  7. @Autowired
  8. private CarDao carDao;
  9.  
  10. @Test
  11. public void test01(){
  12. carDao.insertCar();
  13. }
  14. }

spring的开发的更多相关文章

  1. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->使用Spring Framework开发自己的应用程序

    1.直接基于spring framework开发自己的应用程序: 1.1参考资料: Spring官网spring-framework.4.3.5.RELAESE的Reference Documenta ...

  2. 用Spring MVC开发简单的Web应用

    这个例子是来自于Gary Mak等人写的Spring攻略(第二版)第八章Spring @MVC中的一个例子,在此以学习为目的进行记录. 问题:想用Spring MVC开发一个简单的Web应用, 学习这 ...

  3. Annotation(三)——Spring注解开发

    Spring框架的核心功能IoC(Inversion of Control),也就是通过Spring容器进行对象的管理,以及对象之间组合关系的映射.通常情况下我们会在xml配置文件中进行action, ...

  4. spring注解开发中常用注解以及简单配置

    一.spring注解开发中常用注解以及简单配置 1.为什么要用注解开发:spring的核心是Ioc容器和Aop,对于传统的Ioc编程来说我们需要在spring的配置文件中邪大量的bean来向sprin ...

  5. Spring Boot——开发新一代Spring应用

    Spring官方网站本身使用Spring框架开发,随着功能以及业务逻辑的日益复杂,应用伴随着大量的XML配置文件以及复杂的Bean依赖关系.随着Spring 3.0的发布,Spring IO团队逐渐开 ...

  6. Spring MVC + Spring + Mybitis开发Java Web程序基础

    Spring MVC + Spring + Mybitis是除了SSH外的另外一种常见的web框架组合. Java web开发和普通的Java应用程序开发是不太一样的,下面是一个Java web开发在 ...

  7. 使用Spring Boot开发Web项目(二)之添加HTTPS支持

    上篇博客使用Spring Boot开发Web项目我们简单介绍了使用如何使用Spring Boot创建一个使用了Thymeleaf模板引擎的Web项目,当然这还远远不够.今天我们再来看看如何给我们的We ...

  8. JAX-RS和 Spring 整合开发

    JAX-RS 和 和 Spring 整合开发 1.建立maven项目 2.导入maven坐标 <dependencies> <!-- cxf 进行rs开发 必须导入 --> & ...

  9. Spring Cloud开发实践 - 01 - 简介和根模块

    简介 使用Spring Boot的提升主要在于jar的打包形式给运维带来了很大的便利, 而Spring Cloud本身的优点不是那么明显, 相对于Dubbo而言, 可能体现在跨语言的交互性上(例如可以 ...

  10. Spring 集成开发工具(STS)安装及配置

    安装 spring 集成开发工具,下载地址:https://spring.io/tools 下载后,解压,双击 STS ,运行. 如果提示: 去oracle的网站上下载了1.8版本的jdk,下载地址如 ...

随机推荐

  1. css flex 使内容 水平居中 的方法...

    刚开始以为是  justify-content : center 设置为 居中... 的确,,当 元素满了时 的确能 居中.但是 当只有一个元素时,这一个元素也会居中... 想了半天没找到方法..突然 ...

  2. SPOJ - LOCKER 数论 贪心

    题意:求出\(n\)拆分成若干个数使其连乘最大的值 本题是之江学院网络赛的原题,计算规模大一点,看到EMAXX推荐就做了 忘了大一那会是怎么用均值不等式推出结果的(还给老师系列) 结论倒还记得:贪心分 ...

  3. [转] 利用dockerize模板为容器内应用生成配置文件和环境变量

    [FROM] https://blog.csdn.net/liucaihong123/article/details/51945413 首先试验一下dockerize的可用性: 最近一个docker容 ...

  4. [转] 如何在ie11里使用a连接创建动态下载文件流

    [From] https://segmentfault.com/q/1010000009470664 查了资料,可以使用微软独家的msSaveBlob, 这个方法支持ie10及以上. var down ...

  5. 远程上传下载文件-Xftp5

    Xftp5下载 链接:https://pan.baidu.com/s/1Wzso_Q7mPy5uGOUlripEWg 密码:xfx9 安装选择家庭版 由于21端口没有开,所以不能选FTP,  选择SF ...

  6. linux 命令之重定向

    linux 重定向及部分命令 一,重定向讲解: 1> 标准输出重定向 覆盖原有内容 慎用!!!!!! 1>> 标准输出追加重定向 追加内容 2> 错误输出重定向 只输出错误信息 ...

  7. forEach和map和for方法的区别

    JS中的forEach.$.each.map方法推荐 转载  2016-04-05   投稿:jingxian    我要评论 下面小编就为大家带来一篇JS中的forEach.$.each.map方法 ...

  8. tgz 文件解压

    使用命令:tar zxvf ×××.tgz 即可进行解压 留作备忘

  9. c++ MFC图像处理CImage类常用操作代码

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9598974.html MFC图像处理CImage类常用操作 CImage类头文件为#inclu ...

  10. Linux利器strace

    strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式 ...