Spring基础、IOC、SpringMVC

前言

Spring基础、IOC、SpringMVC
博客地址:芒果橙的个人博客 【http://mangocheng.com】

一、常见问题

1. 基础信息

  • 描述:轻量级开发框架,旨在提高开发效率及系统的可维护性。

  • 模块:核心容器、数据访问/集成、Web、AOP、工具、消息、测试模块

  • 特征

    • 核心技术:DI、AOP、events、资源…
    • 数据访问

2. RestController vs Controller

  • 返回

    • Controller 返回一个页面(不加@ResponseBody)

    • RestController 返回对象:JSON或XML数据,对象数据直接写入HTTP响应,属于RESTful Web服务(前后端分离)

3. Spring IoC & AOP

  • IoC:Inverse of Control ,控制反转。[依赖倒置原则][https://www.zhihu.com/question/23277575/answer/169698662]
    • 一种设计思想,将原本在程序中手动创建对象的控制权交由Spring框架来管理。IoC容器是Spring用来实现IOC的载体,Map结构。
    • 类似工厂,当需要创建一个对象时,只需配置好配置文件/注解即可
  • 实现方式
    • DI
  • AOP:Aspect Oriented Programming,面向切面编程。
    • 将与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低耦合度,提高可拓展性和可维护性。
    • 基于动态代理
  • JNDI:Java Naming and Directory Interface,Java命名和目录接口)
    • SUN公司提供的一种标准的Java命名系统接口
    • JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。

4. Spring单例与线程安全

  • @Component和@Bean

    • @Component 作用于类,@Bean作用于方法
  • 将一个类声明为Spring的bean的注解

    • @Component:通用
    • @Repository:持久层,DAO
    • @Service:服务层
    • @Controller:Spring MVC控制层
  • 在类中注入属性对象的注解

    • Autowired
    • Resource
    • Qualifier

5. Spring MVC

  1. Model1时代:JSP为主体
  2. Model2时代:Java Bean(Model)+JSP(View)+Servlet(Controller)–JavaWeb MVC
  3. Spring MVC:对客户端的请求通过后端分层调用方式,将视图数据返回客户端
    1. 浏览器发送请求到后端DispatcherServlet,由Servlet找到对应的Handler类(控制层)
    2. Handler类调用处理器处理相应逻辑,返回ModelAndView(模型视图对象)
    3. ViewResolver(视图解析器)找到View,DisapterServlet将Model传给View,并返回给浏览器进行渲染

二、IOC

获得依赖对象的过程被反转了

1.DI:dependency Injection(依赖注入)

  • 描述:由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。即将实例变量传入到一个对象中去。
  • 理解
    • 找IOC容器==>容器返回对象==>使用对象
    • 房屋中介(找中介==>中介介绍房子==>租房入住)

2.Bean配置

  • 描述:在Spring中,每一个对象都是一个bean

  • 使用方式

    • 注解

    • xml配置

      <!-- 设值注入 -->
      <bean id="userService" class="com.mango.service.UserService" >
          <property name="userDAO" ref="userDAO"></property>
      </bean>
      <!-- 构造注入 -->
      <bean id="userService" class="com.mango.service.UserService" >
          <constructor-arg name="userDAO" ref="userDAO"></constructor-arg>
      </bean>
      
      <bean id="userDAO" class="com.mango.dao.UserDAO"></bean>
      
      public class UserServiceImpl implements UserService{
          
          private UserDAO userDAO;
          
          // 构造注入
          public UserServiceImpl(UserDAO userDAO){
              this.userDAO = userDAO;
          }
          
          // 设值注入
          public void setUserDAO(UserDAO userDAO){
              this.userDAO = userDAO;
          }
          
      }
      
  • 配置项

    • Id
    • Class
    • scope
  • 作用域

    • singleton:单例,指一个Bean容器中只能存在一份,默认

    • prototype:每次请求(每次使用)创建新的实例,destroy方式不生效

    • request:每次http请求创建一个实例且仅在当前request内有效

    • session:同上,每次http请求创建,当前session内有效

    • global session:基于portlet的web中有效,如果在web中,同session

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芒果-橙

谢谢啦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值