热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Spring:上

#Spring是什么开源的,用来简化企业级应用开发的应用开发框架。简化开发:Spring框架对常用的api都做了封装,比如对jdbc就做了一套封装(

#Spring是什么

开源的,用来简化企业级应用开发的应用开发框架。


  • 简化开发: Spring框架对常用的api都做了封装,比如对jdbc就做了一套封装(Spring Jdbc),使用SpringJdbc访问数据库,就不再需要考虑如何获取连接与关闭连接等操作了。
  • 解耦: Spring帮我们管理对象之间的依赖关系(对象之间的耦合度降低了),这样软件的维护性得到提高。
  • 集成其它框架:Spring可以很好地和其它的一些框架进行集成,这样,使用这些框架就更方便了。
    #Spring容器

(1) 什么是Spring容器?
Spring框架中的一个核心模块,用来管理对象。
管理对象:对象的创建、销毁、初始化等等操作,以及对象之间的依赖关系。

(2) 如何启动Spring容器?
step1.导包。 spring-webmvc
step2.添加Spring配置文件。
step3.启动容器。

(3) 如何创建对象?


  1. 方式一 无参构造器
    step1.为类添加无参构造器或者直接使用缺省构造器。
    step2.在配置文件当中,添加bean元素。



step3.启动容器,调用容器提供的一个方法(getBean)。


  1. 方式二 静态工厂方法



  1. 方式三 实例工厂方法



(4) 作用域


  1. 默认情况下,对于某个bean元素,容器只会创建一个实例。
  2. 如果将作用域设置为"prototype",容器会创建多个实例。


(5) 生命周期相关的两个方法
1)初始化
使用init-method属性指定初始化方法。

2)销毁
使用destroy-method属性指定销毁方法。
只有作用域为singleton时,销毁方法才会执行。


destroy-method="destroy" scope="singleton"/>

(6)延迟加载
1)默认情况下
容器启动之后,会将所有作用域为singleton的bean先创建好。

2)容器启动之后,对于作用域为singleton的bean,不再创建
(当调用getBean方法时才会创建)



#IOC和DI


  • IOC (Inversion Of Controll 控制反转)
    对象之间的依赖关系由容器来建立。

  • DI(Dependency Injection 依赖注入)
    容器通过调用set方法或者构造器来建立对象之间的依赖关系。

  • IOC是目标,DI是手段。

  • 依赖注入的两种方式
    方式一 set方法注入
    step1. 添加set方法。
    step2. 在配置文件当中,使用来配置set方法注入。
    step3. 启动容器,调用getBean方法。


方式二 构造器注入
step1. 添加相应的构造器
step2. 在配置文件当中,使用来配置构造器注入。
step3. 启动容器,调用getBean方法。


4)自动装配


  • 容器默认情况下,是不会自动装配的。
  • 可以让容器依据某些规则,自动建立对象之间的依赖关系
    (仍然需要调用set方法或者构造器)。
  • 自动装配建议少用,如果要使用,建议使用byName。



#注入基本类型的值


  • 使用value属性



  • 注入集合类型的值
    List,Set,Map,Properties

(1)方式一 直接注入

喝酒抽烟烫头烫头北京上海深圳tom1234

(2)方式二 引用的方式注入

钓鱼国画做饭金陵洛阳北平sally1234

  • 读取properties文件



#Spring表达式
读取bean的属性值或者读取集合类型的值


#注解
step1.使用注解简化配置文件


  • 组件扫描
    容器会扫描base-package指定的包及其子包下面所有的类,如果该类前面有一些特定的注解(比如 @Component),则纳入容器进行管理(相当于在配置文件当中有一个对应的bean元素一样)。
  • 编程步骤
    step1.在类前面添加一些特定的注解。
    @Component 通用。
    @Repository 持久层。
    @Service 业务层。
    @Controller 控制层。

step2.在配置文件当中,配置组件扫描。



##几个注解
这里写图片描述

依赖注入相关的几个注解
@Autowired @Qualifier


  • 支持set方法注入
    这里写图片描述

这里写图片描述


  • 支持构造器注入
    这里写图片描述

@Resource(只支持set方法注入)
这里写图片描述

@Value
这里写图片描述

#SpringMVC


  • SpringMVC
    是一个用来简化基于MVC架构的web应用程序开发的应用开发框架。
    SpringMVC是Spring框架的一部分。

##MVC
(Model 模型 View 视图 Controller 控制器)


  • MVC?
    是一种软件架构思想,可以将软件划分成三种不同类型的模块,分别
    是模型,视图和控制器。
    模型用于封装业务逻辑的处理,视图用于数据展现和操作界面,
    控制器用于协调模型和视图(视图将请求发送给控制器,由控制器选择对应的模型来处理;模型将处理结果交给控制器,由控制器选择合适的视图来展现处理结果)。

  • 如何使用MVC?

这里写图片描述


  • 优点
  • 方便测试 (将业务逻辑写在servlet里面,需要部署之后才能测试,而写在java类里面,可以直接测试)。
  • 方便代码的维护(修改模型不影响视图,反之也是如此)。
  • 方便分工协作。
    ##五大组件
  • DispatcherServlet 前端控制器
  • HandlerMapping 映射处理器
  • Controller 处理器
  • ModelAndView 模型和视图
  • ViewResolver 视图解析器

这里写图片描述
#基于XML配置的mvc应用
step1.导包。
导入Spring-webmvc.jar包(3.2.8)

step2.添加spring配置文件。

step3.配置DispatcherServlet。


springmvcorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:spring-mvc.xml1

springmvc*.do


step4.写Controller。

package controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;public class HelloController implements Controller{public ModelAndView handleRequest(HttpServletRequest arg0,HttpServletResponse arg1) throws Exception {System.out.println("handleRequest()");/** ModelAndView有两个常用的构造器* ModelAndView(String viewName)* ModelAndView(String viewName,Map data)* viewName:视图名* data: 数据*/return new ModelAndView("hello");}
}

step5.写jsp。

<%&#64;page pageEncoding&#61;"utf-8"
contentType&#61;"text/html; charset&#61;utf-8" %>
Hello,SpringMVC!

step6.在spring配置文件中&#xff0c;配置HandlerMapping,Controller和ViewResolver。


helloController

#基于注解的配置的mvc应用

##编程步骤
step1.导包 (spring-webmvc)

step2.添加Spring配置文件。

step3.配置DispatcherServlet。
需要指定初始化参数&#xff08;因为DispatcherServlet的初始化方法会启动Spring容器&#xff0c;所以&#xff0c;需要知道Spring配置文件的位置&#xff09;。

step4.写Controller。
a. 不再需要实现Controller接口。
b.方法名不作要求&#xff0c;返回类型可以是ModelAndView,也可以是String。
c.可以有多个方法。
d.在Controller类前添加&#64;Controller。该注解用于组件扫描。
e.使用&#64;RequestMapping来代替HandlerMapping的配置。
该注解可以添加到类前面以及方法前面。

&#64;Controller
//&#64;RequestMapping("/demo")
public class HelloController {&#64;RequestMapping("/hello.do")public String hello(){System.out.println("hello()");//返回视图名return "hello";}

step5.写jsp。

step6.在Spring的配置文件里面&#xff0c;添加:视图解析器&#xff0c;组件扫描&#xff0c;mvc注解扫描&#xff0c;要想让&#64;RequestMapping起作用&#xff0c;需要配置mvc注解扫描。








##读取请求参数值
方式一 通过request

&#64;RequestMapping("/b.do")/** DispatcherServlet利用java反射分析处理器的* 方法签名&#xff08;方法名&#xff0c;参数类型&#xff0c;返回类型&#xff09;&#xff0c;然后* 将需要的对象作为参数传进来。* 比如&#xff0c;这儿&#xff0c;需要有一个request对象&#xff0c;* DispatcherServlet就会将request作为参数传进来。*/public String bmi(HttpServletRequest request){System.out.println("bmi()");String height &#61; request.getParameter("height");String weight &#61; request.getParameter("weight");System.out.println(height &#43; " " &#43; weight);return "view";}

方式二 通过&#64;RequestParam

&#64;RequestMapping("/b2.do")/** * DispatcherServlet利用java反射分析方法的签名&#xff0c;* 会将参数值获得之后&#xff0c;赋给对应的形参。* 注&#xff1a;* 可以使用&#64;RequestParam注解告诉DispatcherServlet,* 形参名与请求参数名的对应关系。*/public String bmi2(&#64;RequestParam("height") String height1,String weight){System.out.println("bmi2()");System.out.println(height1 &#43; " " &#43; weight);return "view";}

方式三 通过javabean

&#64;RequestMapping("/b3.do")/** * DispatcherServlet通过反射分析方法的签名&#xff0c;* 会将BmiPraram对象创建好之后传进来。* 注&#xff1a;* 会读取相应的请求参数值&#xff0c;并且&#xff0c;会做类型转换。*/public String bmi3(BmiParam bp){System.out.println("b3()");System.out.println(bp.getHeight() &#43; " " &#43; bp.getWeight());return "view";}

##向页面传值
方式一 绑订数据到request

&#64;RequestMapping("/b4.do")public String bmi4(HttpServletRequest request){String status &#61; "很帅";request.setAttribute("status", status);//默认就是转发return "view";}

方式二 返回ModelAndView

&#64;RequestMapping("/b5.do")public ModelAndView bmi5(){ String status &#61; "很帅";/** 将数据添加到ModelAndView。* DispatcherServlet会将数据(data)取出来&#xff0c;* 然后绑订到request上&#xff08;以key作为绑订名&#xff09;。*/Map data &#61; new HashMap();data.put("status", status);ModelAndView mav &#61; new ModelAndView("view",data);return mav;}

方式三 绑订数据到ModelMap

&#64;RequestMapping("/b6.do")public String bmi6(ModelMap mm){double bmi &#61; weight / height / height;String status &#61; "很帅";/** DispatcherServlet从ModelMap中取出数据&#xff0c;* 然后绑订到request上&#xff08;以key作为绑订名&#xff09;。*/mm.addAttribute("status", status); return "view";}

方式四 绑订数据到session

&#64;RequestMapping("/b7.do")public String bmi7HttpSession session){ String status &#61; "很帅";session.setAttribute("status", status);return "view";}

##重定向
情形一 方法的返回值是String

return "redirect:toIndex.do"

情形二 方法的返回值是ModelAndView

RedirectView rv &#61; new RedirectView("toIndex.do");ModelAndView mav &#61; new ModelAndView(rv);
return mav;

推荐阅读
author-avatar
tingel34
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有