• Spring之ioc


    目录

    1、什么是Spring,它能够做什么?

    2、什么是控制反转?

    2.1、控制反转

    2.2、依赖注入

    3、如何在Spring当中定义和配置一个javaBean

    4、简单属性的配置

    5、复杂属性的配置

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

    7、Spring与web项目的集成


    1、什么是Spring,它能够做什么?

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

    2、什么是控制反转?

    2.1、控制反转

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

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

    spring-context.xml

    1. <bean class="com.ssr.biz.impl.UserBizImpl2" id="userbiz"></bean>
    2. <bean class="com.ssr.web.UserAction" id="userAction">
    3. <property name="userbiz" ref="userbiz"></property>
    4. </bean>
    5. <bean class="com.ssr.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.2、依赖注入

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

     依赖关系注入到组件之中 

     依赖注入的3种方式

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

    spring-context.xml

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

     第二种:构造 注入

    spring-context.xml

    1. <!--构造 注入 -->
    2. <bean class="com.ssr.web.OrderAction" id="orderAction">
    3. <property name="userbiz" ref="userbiz"></property>
    4. <constructor-arg name="age" value="32"></constructor-arg>
    5. <constructor-arg name="hobby">
    6. <list>
    7. <value>rap</value>
    8. <value>篮球</value>
    9. </list>
    10. </constructor-arg>
    11. <constructor-arg name="name" value="ssr"></constructor-arg>
    12. </bean>

    第三种:自动装配

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

    3、如何在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.ssr.web.OrderAction" name="ssr" scope="prototype"
    2. abstract="true" parent="person" init-method="init">
    3. <constructor-arg name="name">
    4. <value>ssr</value>
    5. </constructor-arg>
    6. </bean>

    4、简单属性的配置

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

    1. <!--注入name-->
    2. <property name="name">
    3. <value>idea</value>
    4. </property>
    5. <!-- 日期格式注入 -->
    6. <bean id="dateFormat" class="java.text.SimpleDateFormat">
    7. <constructor-arg value="yyyy-MM-dd" />
    8. </bean>
    9. <!--注入日期-->
    10. <property name="birthDay">
    11. <bean factory-bean="dateFormat" factory-method="parse">
    12. <constructor-arg value="2002-03-10" />
    13. </bean>
    14. </property>

    5、复杂属性的配置

    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. <!--注入arr数组-->
    5. <property name="arr">
    6. <array>
    7. <value>zs</value>
    8. <value>ls</value>
    9. </array>
    10. </property>
    11. <!--注入List集合-->
    12. <property name="list">
    13. <list>
    14. <value>01</value>
    15. <value>02</value>
    16. <value>03</value>
    17. </list>
    18. </property>
    19. <!--注入map集合-->
    20. <property name="map">
    21. <map>
    22. <entry key="id">
    23. <value>20220804</value>
    24. </entry>
    25. <entry key="id2">
    26. <value>20220805</value>
    27. </entry>
    28. </map>
    29. </property>
    30. <!--注入Properties文件-->
    31. <property name="pro">
    32. <props>
    33. <prop key="id">aa</prop>
    34. <prop key="id2">bb</prop>
    35. </props>
    36. </property>

    6、针对项目,配置文件路径的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" };//分模块开发

    7、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>springConfigLocation</param-name>
    3. <param-value>/applicationContext.xml</param-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. }

  • 相关阅读:
    Hive实践——将查询的数据按照分区进行存储
    全球约有 150 亿台设备在运行 Java,收费后还能用吗?
    IDE助力提高生产力
    [剑指Offer] 两种方法求解空格替换
    Linux系统Redis的安装
    Nacos-server(1.4.4)安装部署-SpringCloudAlibaba微服务
    excel映射xml方法
    如何高效访问OneDrive个人存储空间?三种方法
    APUE 第4章: cp命令实现,同时去除文件中的空洞
    无线渗透理论_WEP加密
  • 原文地址:https://blog.csdn.net/m0_65774688/article/details/126497655