• Spring(01)


    目录

    一、什么是spring,它能够做什么?

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

    1、控制反转

    2、依赖注入 

    三、如何在spring当中定义和配置一个JavaBean

    四、 简单属性的配置

    五、 复杂属性的配置

    六 、针对项目,配置文件路径的2种写法

    七. spring与web项目的集成   


    一、什么是spring,它能够做什么?

    Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。
       Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。
       然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
       目的:解决企业应用开发的复杂性
       功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
       范围:任何Java应用
       简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

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

    1、控制反转

     控制反转(IoC=Inversion of Control)IoC,用白话来讲,就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:(依赖)控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。

    案例:实现Spring的IoC
       将以前由程序员实例化对象/赋值的工作交给了spring处理

    spring-context.xml

    1. <bean class="com.cxy.biz.impl.UserBizImpl2" id="userbiz">bean>
    2. <bean class="com.cxy.web.UserAction" id="userAction">
    3. <property name="userbiz" ref="userbiz">property>
    4. bean>
    5. <bean class="com.cxy.web.OrderAction" id="orderAction">
    6. <property name="userbiz" ref="userbiz">property>
    7. bean>
    1. public class Demo1 {
    2. @SuppressWarnings("resource")
    3. public static void main(String[] args) {
    4. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/spring-context.xml");
    5. UserAction useraction = (UserAction) context.getBean("userAction");
    6. useraction.list();
    7. OrderAction orderaction = (OrderAction) context.getBean("orderAction");
    8. orderaction.list();
    9. }

    2、依赖注入 

     IoC还有一个另外的名字:“依赖注入 (DI=Dependency Injection)”  ,即由容器动态的将某种依赖关系注入到组件之中 


     依赖注入的3种方式

    第一种:set注入(定义属性,set方法)

    spring-context.xml

    1. <bean class="com.cxy.web.UserAction" id="userAction">
    2. <property name="userbiz" ref="userbiz">property>
    3. <property name="age" value="22">property>
    4. <property name="name" value="cxy">property>
    5. <property name="hobby">
    6. <list>
    7. <value>rapvalue>
    8. <value>篮球value>
    9. list>
    10. property>
    11. bean>

     第二种:构造 注入

    spring-context.xml

    1. <bean class="com.cxy.web.OrderAction" id="orderAction">
    2. <property name="userbiz" ref="userbiz">property>
    3. <constructor-arg name="age" value="32">constructor-arg>
    4. <constructor-arg name="hobby">
    5. <list>
    6. <value>rapvalue>
    7. <value>篮球value>
    8. list>
    9. constructor-arg>
    10. <constructor-arg name="name" value="cxy">constructor-arg>
    11. bean>

    第三种: 自动转配

    byName:是对Spring管理的bean对象的id进行查找,如果找不到则注入失败 反之成功byType:是对spring管理的bean对象接口实现类进行查找,如果没有或两个以上,则注入失败 反之成功

    三、如何在spring当中定义和配置一个JavaBean

    1 、id:在容器中查找Bean的id(唯一、且不能以/开头)
    2 、class:bean的完整类名
    3 、name:在容器中查找Bean的名字(唯一、允许以/开头、允许多个值,多个值之间用逗号或空格隔开)
    4 、scope:(singleton|prototype)默认是singleton
            4.1 singleton(单例模式):在每个Spring IoC容器中一个bean定义对应一个对象实例
            4.2 prototype(原型模式/多例模式):一个bean定义对应多个对象实例
    5 、abstract:将一个bean定义成抽象bean(抽象bean是不能实例化的),抽象类一定要定义成抽象bean,非抽象类也可以定义成抽象bean
    6 、parent:指定一个父bean(必须要有继承关系才行)
    7 、init-method:指定bean的初始化方法
    8、 constructor-arg:使用有参数构造方法创建javaBean

    1. <bean id="orderaction" class="com.cxy.web.OrderAction" name="cxy" scope="prototype"
    2. abstract="true" parent="person" init-method="init">
    3. <constructor-arg name="name">
    4. <value>cxyvalue>
    5. constructor-arg>
    6. bean>

    四、 简单属性的配置

     8+1+3
       8基础数据+String+3个sql
       java.util.Date
         java.sql.Date
         java.sql.Time
         java.sql.Timestamp
       通过标签赋值即可

    1. <property name="name">
    2. <value>ideavalue>
    3. property>
    4. <bean id="dateFormat" class="java.text.SimpleDateFormat">
    5. <constructor-arg value="yyyy-MM-dd" />
    6. bean>
    7. <property name="birthDay">
    8. <bean factory-bean="dateFormat" factory-method="parse">
    9. <constructor-arg value="2002-03-10" />
    10. bean>
    11. property>

    五、 复杂属性的配置

    5.1 JavaBean
          ref bean=""
      5.2 List或数组
      5.3 Map
      5.4 Properties

    1. <property name="name">
    2. <ref bean="name">ref>
    3. property>
    4. <property name="arr">
    5. <array>
    6. <value>zsvalue>
    7. <value>lsvalue>
    8. array>
    9. property>
    10. <property name="list">
    11. <list>
    12. <value>01value>
    13. <value>02value>
    14. <value>03value>
    15. list>
    16. property>
    17. <property name="map">
    18. <map>
    19. <entry key="id">
    20. <value>20220804value>
    21. entry>
    22. <entry key="id2">
    23. <value>20220805value>
    24. entry>
    25. map>
    26. property>
    27. <property name="pro">
    28. <props>
    29. <prop key="id">aaprop>
    30. <prop key="id2">bbprop>
    31. props>
    32. property>

    六 、针对项目,配置文件路径的2种写法

    1.  ApplicationContext
    2.    String path = "applicationContext.xml";
    3.    String path = "classpath:applicationContext-*.xml";//src
    4.    String[] path = new String[] { "applicationContext-a.xml", "applicationContext-b.xml" };//分模块开发

    七. spring与web项目的集成   

    1、为什么要进行整合

    在未整合之前我们都是通过建模拿到Spring容器的上下文,但是建模十分耗时,并且项目庞大的话我们需要进行多次建模,就更加耗时

    2、整合所需要解决的问题
    2.1 建模必不可少

    2.2 建模要保证只执行一次

    2.3建模后期再每一个Servlet都能够拿到Spring上下文对象ClasspathXmlApplication

    3、如何解决
    3.1.监听器的初始化方法
    3. 2.Spring的上下文要存放在tomcat上下文中


    WEB项目如何读取spring上下文
       通过监听器实现ServletContextListener
       contextConfigLocation:classpath:applicationContext-*.xml 

    1. <context-param>
    2. <param-name>springConfigLocationparam-name>
    3. <param-value>/applicationContext.xmlparam-value>
    4. context-param>

     监视器

    1. public class SpringLoadListener implements ServletContextListener{
    2. @Override
    3. public void contextInitialized(ServletContextEvent sce) {
    4. //拿到Spring的上下文
    5. ServletContext servletContext = sce.getServletContext();
    6. String springConfigLocation = servletContext.getInitParameter("springConfigLocation");
    7. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/s pring-context.xml");
    8. //将Spring的上下文保存到tomcat上下文中
    9. servletContext.setAttribute("springContext",context );
    10. }

  • 相关阅读:
    maven创建父子依赖项目—pom
    计算机毕业设计之微信小程序美容理发店预约系统app
    MongoDB学习(一)
    河北省图书馆典藏《乡村振兴振兴战略下传统村落文化旅游设计》许少辉八一新著
    SpringBoot WebSocket STOMP
    数据库——概述
    Typescript 中根据某个字段判断其他字段是否必传
    制作一个用户登录界面
    MFC实现关闭窗口,弹出确认提示
    为什么学了模数电还是看不懂较复杂的电路图?
  • 原文地址:https://blog.csdn.net/m0_62528678/article/details/126176574