• Spring 依赖注入方式与自动装配


    1 Spring 依赖注入四种方式

    1.1 构造器注入

    1. /*带参数,方便利用构造器进行注入*/
    2. public CatDaoImpl(String message){
    3. this. message = message;
    4. }
    5. <bean id="CatDaoImpl" class="com.CatDaoImpl">
    6. <constructor-arg value=" message "></constructor-arg>
    7. </bean>

    1.2 setter 方法

    1. public class Id {
    2. private int id;
    3. public int getId() { return id; }
    4. public void setId(int id) { this.id = id; }
    5. }
    6. <bean id="id" class="com.id "> <property name="id" value="123"></property> </bean>

    1.3 静态工厂注入

            静态工厂顾名思义,就是通过调用静态工厂的方法来获取自己需要的对象,为了让 spring 管理所有对象,我们不能直接通过"工程类.静态方法()"来获取对象,而是依然通过 spring 注入的形式获取:       

    1. public class DaoFactory { //静态工厂
    2. public static final FactoryDao getStaticFactoryDaoImpl(){
    3. return new StaticFacotryDaoImpl();
    4. }
    5. }
    6. public class SpringAction {
    7. private FactoryDao staticFactoryDao; //注入对象
    8. //注入对象的 set 方法
    9. public void setStaticFactoryDao(FactoryDao staticFactoryDao) {
    10. this.staticFactoryDao = staticFactoryDao;
    11. }
    12. }
    13. //factory-method="getStaticFactoryDaoImpl"指定调用哪个工厂方法
    14. <bean name="springAction" class=" SpringAction" >
    15. <!--使用静态工厂的方法注入对象,对应下面的配置文件-->
    16. <property name="staticFactoryDao" ref="staticFactoryDao"></property>
    17. </bean>
    18. <!--此处获取对象的方式是从工厂类中获取静态方法-->
    19. <bean name="staticFactoryDao" class="DaoFactory"
    20. factory-method="getStaticFactoryDaoImpl"></bean>

    1.4 实例工厂

            实例工厂的意思是获取对象实例的方法不是静态的,所以你需要首先 new 工厂类,再调用普通的实例方法

    1. public class DaoFactory { //实例工厂
    2. public FactoryDao getFactoryDaoImpl(){
    3. return new FactoryDaoImpl();
    4. }
    5. }
    6. public class SpringAction {
    7. private FactoryDao factoryDao; //注入对象
    8. public void setFactoryDao(FactoryDao factoryDao) {
    9. this.factoryDao = factoryDao;
    10. }
    11. }
    12. <bean name="springAction" class="SpringAction">
    13. <!--使用实例工厂的方法注入对象,对应下面的配置文件-->
    14. <property name="factoryDao" ref="factoryDao"></property>
    15. </bean>
    16. <!--此处获取对象的方式是从工厂类中获取实例方法-->
    17. <bean name="daoFactory" class="com.DaoFactory"></bean>
    18. <bean name="factoryDao" factory-bean="daoFactory"
    19. factory-method="getFactoryDaoImpl"></bean>

    2  5种不同方式的自动装配

    Spring 装配包括手动装配和自动装配,手动装配是有基于 xml 装配、构造方法、setter 方法等
    自动装配有五种自动装配的方式,可以用来指导 Spring 容器用自动装配方式来进行依赖注入。

    • no:默认的方式是不进行自动装配,通过显式设置 ref 属性来进行装配。
    •  byName:通过参数名 自动装配,Spring 容器在配置文件中发现 bean 的 autowire 属性被设置成 byname,之后容器试图匹配、装配和该 bean 的属性具有相同名字的 bean。
    •  byType:通过参数类型自动装配,Spring 容器在配置文件中发现 bean 的 autowire 属性被设置成byType,之后容器试图匹配、装配和该bean的属性具有相同类型的bean。如果有多个 bean 符合条件,则抛出错误。
    • constructor:这个方式类似于 byType, 但是要提供给构造器参数,如果没有确定的带参数的构造器参数类型,将会抛出异常。
    • autodetect:首先尝试使用 constructor 来自动装配,如果无法工作,则使用 byType方式。

    3  Spring Boot 原理

            Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的
    配置。通过这种方式,Spring Boot 致力于在蓬勃发展的快速应用开发领域(rapid application
    development)成为领导者。其特点如下:

    • 创建独立的 Spring 应用程序
    • 嵌入的 Tomcat ,无需部署 WAR 文件
    • 简化 Maven 配置
    •  自动配置 Spring
    • 提供生产就绪型功能,如指标,健康检查和外部配置
    • 绝对没有代码生成和对 XML 没有要求配置 

    4 Spring MVC 原理

            Spring 的模型-视图-控制器(MVC)框架是围绕一个 DispatcherServlet 来设计的,这个 Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。

    4.1 MVC 流程

     Http 请求 到 DispatcherServlet
    (1) 客户端请求提交到 DispatcherServlet。
    HandlerMapping 寻找处理器
    (2) 由 DispatcherServlet 控制器查询一个或多个 HandlerMapping,找到处理请求的
    Controller。
    调用处理器 Controller
    (3) DispatcherServlet 将请求提交到 Controller。
    Controller 调用业务逻辑处理后,返回 ModelAndView
    (4)(5)调用业务处理和返回结果:Controller 调用业务逻辑处理后,返回 ModelAndView。
    DispatcherServlet 查询 ModelAndView
    (6)(7)处理视图映射并返回模型: DispatcherServlet 查询一个或多个 ViewResoler 视图解析器,
    找到 ModelAndView 指定的视图。
    ModelAndView 反馈浏览器 HTTP
    (8) Http 响应:视图负责将结果显示到客户端。

    4.3 MVC 常用注解

  • 相关阅读:
    Python应用开发——串口通信
    Linux系统基本使用 与 程序部署 - JavaEE初阶 - 细节狂魔
    Python中的*args和**kwargs:打开函数的神秘大门
    Shell--常用小工具(sort、uniq、tr、cut)
    科技云报道:从百度智能云的探索,看懂边缘云的过去和未来
    vue-element-admin 集成框架解读----快速入门
    Python爬虫——Urllib库-3
    2024022502-数据库绪论
    Java并发编程学习十:线程协作
    vite vue引入svg图标及封装 (轻松上手)
  • 原文地址:https://blog.csdn.net/Lj_chuxuezhe/article/details/133470163