• Spring 01 (之oic)


    一、未使用Spring和使用Spring的运行原理图:

    未使用: 

    总结:

    需要频繁修改业务层biz代码,反复修改册会出现Bug问题。

    使用:

    总结: 

     减少代码的改动,解决开发的复杂性。


    二、什么是Spring,Spring ioc的用途

    2.1        Spring简介

     Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。
       Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。
       然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。


       目的:解决企业应用开发的复杂性
       功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
       范围:任何Java应用


       简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

    ①、架构方案层面

     

     ②、技术层面

    安全技术方面:Shiro springSecurity
    数据库层面:hibernate/mybatis SpringDataJpa
    消息中间件:activityMQ、RabbitMQ、kaffka spring…MQ


     三、Spring中ioc的特点及依赖注入的三种方式

    3.1、什么是控制反转(或依赖注入)

    控制反转(IoC=Inversion of Control)IoC,用白话来讲,就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:(依赖)控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。
    IoC还有一个另外的名字:“依赖注入 (DI=Dependency Injection)” ,即由容器动态的将某种依赖关系注入到组件之中
    案例:实现Spring的IoC
    IOC/DI
    将以前由程序员实例化对象/赋值的工作交给了spring处理

    3.2、依赖注入的三种方式

    ①set 注入

    1. <bean class="com.chenchen.web.UserAction" id="userAction">
    2. <property name="userBiz" ref="userBiz">property>
    3. <property name="name" value="kafei">property>
    4. <property name="age" value="22">property>
    5. <property name="hobby">
    6. <list>
    7. <value>爱喝咖啡value>
    8. <value>喜欢喝咖啡value>
    9. <value>我是一杯咖啡value>
    10. list>
    11. property>
    12. bean>

    ②构造注入 

    1. <bean class="com.chenchen.web.OrderAction" id="orderAction">
    2. <property name="userBiz" ref="userBiz">property>
    3. <constructor-arg name="name" value="zhangsan">constructor-arg>
    4. <constructor-arg name="age" value="22">constructor-arg>
    5. <constructor-arg name="hobby">
    6. <list>
    7. <value>篮球value>
    8. <value>boyvalue>
    9. <value>篮球value>
    10. list>
    11. constructor-arg>
    12. bean>

    ③自动装配(spring3后出现的特性)

    加载beans后面

    default-autowire="byName"
    

    自动装配总结:byName:是通过spring管理的bean对象的ID进行查找,如果找不到则注入失败;反之成功
    byType:是通过spring管理的bean对象接口实现类进行查找;如果没有或两个以上,则注入失败,反之成功

    三、Spring与web容器的整合

    1、why

    建模的过程是十分耗时的
    解决问题:
    1.建模必不可少
    2.建模要保障只执行一次
    3.建模后期望在每一个servlet都能够拿到spring的上下文对象ClassPathXmlApplicationContext 

     2、how

    1.监听器的初始化方法
    2.spring的上下 要 存放 在tomcat上下文中

    3、配置xml

    1. <context-param>
    2. <param-name>springConfigLocationparam-name>
    3. <param-value>/applicationContext.xmlparam-value>
    4. context-param>
    5. <listener>
    6. <listener-class>com.chenchen.ioc.listener.SpringLoadListenerlistener-class>
    7. listener>

    四、最终代码

    1、UserBiz

    1. package com.chenchen.biz;
    2. /**
    3. * 用户业务类
    4. * 需求:
    5. * 同时在用户模块、订单模块拿到所有的用户数据
    6. *
    7. * 需求变更1:
    8. * 同时在用户模块、订单模块拿到所有的用户数据,并且要求用户数据是已经通过年龄排序了的
    9. * 对应策略:修改userBiz中list方法,添加排序功能
    10. *
    11. * 需求变更2:
    12. * 同时在用户模块、订单模块拿到所有的用户数据,并且要求用户数据是已经注册的时间点排序了的
    13. * 对应策略:修改userBiz中list方法,添加排序功能,按照时间点排序
    14. *
    15. * ...
    16. * 总结:
    17. * 最原始:频繁修改业务层biz层代码
    18. * 多实现:凡是涉及到用户业务层 调用的地方,都需要修改代码
    19. *
    20. * @author chenchen
    21. *
    22. */
    23. public interface UserBiz {
    24. void list();
    25. }

    2、UserBizImp1

    1. package com.chenchen.biz.impl;
    2. import com.chenchen.biz.UserBiz;
    3. public class UserBizImpl1 implements UserBiz{
    4. @Override
    5. public void list() {
    6. System.out.println("查询用户数据,按照年龄排序。。。");
    7. }
    8. }

    3、UserBizImpl2

    1. package com.chenchen.biz.impl;
    2. import com.chenchen.biz.UserBiz;
    3. public class UserBizImpl2 implements UserBiz{
    4. @Override
    5. public void list() {
    6. System.out.println("查询用户数据,按照入职时间排序。。。");
    7. }
    8. }

    4、Demo1

    1. package com.chenchen.ioc.demo;
    2. import org.springframework.context.support.ClassPathXmlApplicationContext;
    3. import com.chenchen.web.OrderAction;
    4. import com.chenchen.web.UserAction;
    5. /**
    6. * 1.对spring框架的配置文件进行建模,建模之后,spring-context.xml中所有的javabean信息都会
    7. * 加载进spring 容器的上下文
    8. * 2.上下文中就包含了spring-context.xml 所有对象
    9. *
    10. * @author Administrator
    11. *
    12. * IOC的特点-什么叫控制反转
    13. * 指的是将创建对象的权利反转给spring容器来完成
    14. *
    15. */
    16. public class Demo1 {
    17. @SuppressWarnings("resource")
    18. public static void main(String[] args) {
    19. ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("/spring-context.xml");
    20. UserAction userAction = (UserAction)context.getBean("userAction");
    21. userAction.list();
    22. OrderAction orderAction=(OrderAction)context.getBean("orderAction");
    23. orderAction.list();
    24. }
    25. }

    web.xml

    1. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    4. version="3.1">
    5. <display-name>Archetype Created Web Applicationdisplay-name>
    6. <context-param>
    7. <param-name>springConfigLocationparam-name>
    8. <param-value>/applicationContext.xmlparam-value>
    9. context-param>
    10. <listener>
    11. <listener-class>com.chenchen.ioc.listener.SpringLoadListenerlistener-class>
    12. listener>
    13. web-app>
  • 相关阅读:
    八月券商金工精选
    java计算机毕业设计闲置物品线上交易系统源码+系统+数据库+lw文档+mybatis+运行部署
    Spring的注解开发-依赖注入相关注解
    Pytorch intermediate(四) Language Model (RNN-LM)
    C++面向对象程序设计(第2版)第三章(怎样使用类和对象)知识点总结
    【MybatisPlus】CRUD操作,映射匹配兼容性,ID生成策略,逻辑删除,乐观锁
    Camera HAL 下的SprdCamera3HWI.cpp 内容介绍
    北大肖臻老师《区块链技术与应用》系列课程学习笔记[9]比特币-思考
    OpenCV:01图片&视频的加载显示
    删除list中除最后一个之外所有的数据
  • 原文地址:https://blog.csdn.net/m0_67094505/article/details/126177028