Spring-1

本文深入解析Spring框架中的IoC(控制反转)概念,探讨DI(依赖注入)在Spring中的应用,包括set注入、构造注入、自动注入,以及如何通过配置文件管理对象关系。了解如何利用Spring容器简化对象创建,提升代码灵活性与解耦度。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


Spring

介绍

spring全家桶:spring , springmvc ,spring boot , spring cloud

spring: 出现是在2002左右,解决企业开发的难度。减轻对项目模块之间的管理,
类和类之间的管理, 帮助开发人员创建对象,管理对象之间的关系。
spring核心技术 ioc , aop 。能实现模块之间,类之间的解耦合。

耦合:是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。

解耦合:指将程序的结构变得松散不是固定的而是可变化的 例如接口的实现类是可以更换的 而直接写的类是顶死的 **解耦就是用数学方法将两种运动分离开来处理问题。**程序的解耦合大概就是让代码和程序不绑定不互相依赖

依赖:classa中使用classb的属性或者方法, 叫做classa依赖classb


框架怎么学: 框架是一个软件,其它人写好的软件。
1)知道框架能做什么, mybatis–访问数据库, 对表中的数据执行增删改查。
2)框架的语法, 框架要完成一个功能,需要一定的步骤支持的,
3)框架的内部实现, 框架内部怎么做。 原理是什么。
4)通过学习,可以实现一个框架。

IOC(反转控制)

spring的第一个核心功能 ioc

IoC (Inversion of Control) : 控制反转, 是一个理论,概念,思想。
描述的:把对象的创建,赋值,管理工作都交给代码之外的容器实现, 也就是对象的创建是有其它外部资源完成。

控制: 创建对象,对象的属性赋值,对象之间的关系管理。
反转: 把原来的开发人员管理,创建对象的权限转移给代码之外的容器实现。 由容器代替开发人员管理对象。创建对象,
给属性赋值。

正转:由开发人员在代码中,使用new 构造方法创建对象, 开发人员主动管理对象。

public static void main(String args[]){
        Student student = new Student(); // 在代码中, 创建对象。--正转。
}

容器:是一个服务器软件, 一个框架(spring)

为什么要使用 ioc : 目的就是减少对代码的改动, 也能实现不同的功能。 实现解耦合。

java中创建对象有哪些方式:

  1. 构造方法 , new Student()
  2. 反射
  3. 序列化
  4. 克隆
  5. ioc :容器创建对象
  6. 动态代理

oc的体现:
servlet 1: 创建类继承HttpServelt
2: 在web.xml 注册servlet , 使用 myservlet
com.bjpwernode.controller.MyServlet1

  1. 没有创建 Servlet对象, 没有 MyServlet myservlet = new MyServlet()

  2. Servlet 是Tomcat服务器它能你创建的。 Tomcat也称为容器 Tomcat作为容器:里面存放的有Servlet对象, Listener , Filter对象

IoC的技术实现 ,
DI 是ioc的技术实现,
DI(Dependency Injection) :依赖注入, 只需要在程序中提供要使用的对象名称就可以, 至于对象如何在容器中创建,
赋值,查找都由容器内部实现。

spring是使用的di实现了ioc的功能, spring底层创建对象,使用的是反射机制

spring是一个容器,管理对象,给属性赋值, 底层是反射创建对象。

几种一般注入

<!--
        声明Student对象
        注入:就是赋值的意思
        简单类型
        di:给属性赋值
        1.set注入(设置注入):spring调用类的set方法;你可以再set方法中完成属性赋值<property>(普通赋值 调用类中写好的set方法)
-->
	<bean id="myStudent" class="com.dyw.Ba01.Student">
        <property name="age" value="20"/><!--调用类中的对应的set方法 setName()-->
        <property name="name" value="丁杨维"/>
    </bean>


<!--
    对引用类型进行set设置注入
    引用类型的set注入:spring调用类的set方法
-->
	<bean id="myStudent" class="com.dyw.Ba01.Student">
        <property name="age" value="20"/>
        <property name="name" value="丁杨维"/>
        <property name="school" ref="mySchool"/>
    </bean>

    <bean id="mySchool" class="com.dyw.Ba02.School">
        <property name="name" value="成信大"/>
        <property name="address" value="四川成都双流区"/>
    </bean>


<!--
        2.构造注入:spring调用类有参构造方法,再创建对象的同时,在构造方法中给属性赋值.
        构造注入使用<constructor-arg>标签
        <constructor-arg>标签:一个<constructor-arg>标签表示构造方法的一个参数
        <constructor-arg>标签属性:
            name:表示构造方法的形参名
            index:表示构造方法的参数的位置.参数从左往右位置是0,1,2
            value:构造方法的形参类型是简单类型,使用value
            ref:构造方法的形参是引用类性,使用ref;
-->

	<bean id="myStudent" class="com.dyw.Ba01.Student">
        <constructor-arg name="age" value="20"/>
        <constructor-arg name="name" value="丁杨维"/>
        <constructor-arg name="school" ref="mySchool"/>
    </bean>
    <!--使用index-->
    <bean id="myStudent01" class="com.dyw.Ba01.Student">
        <constructor-arg index="0" value="丁杨维"/>
        <constructor-arg index="1" value="20"/>
        <constructor-arg index="2" ref="mySchool"/>
    </bean>
    <bean id="mySchool" class="com.dyw.Ba02.School">
        <constructor-arg name="name" value="cuit"/>
        <constructor-arg name="address" value="sccd"/>
    </bean>

    <!--省略index 但要按照0,1,2的顺序-->
    <bean id="myStudent02" class="com.dyw.Ba01.Student">
        <constructor-arg  value="阿丁"/>
        <constructor-arg  value="20"/>
        <constructor-arg  ref="mySchool"/>
    </bean>

引用类型的自动注入

<!--
        引用类型的自动注入:spring框架根据某些规则可以给引用类型赋值.不用我们自己给引用类型赋值了
        使用的规则常用的是byName,byType
        1.byName(按名称注入):java类中的引用类型的属性名和spring容器中(配置文件)<bean>的id一样
        且数据类型是一致的,这样的容器中的bean,spring能够赋值给引用类型.
-->
	<!--1.ByName-->
	<bean id="myStudent" class="com.dyw.Ba03.Student" autowire="byName">
        <property name="age" value="20"/>
        <property name="name" value="丁杨维"/>
    </bean>

    <bean id="school" class="com.dyw.Ba03.School" scope="prototype">
        <property name="name" value="cuit"/>
        <property name="address" value="sccd"/>
    </bean>

<!--
        ByType:按类型注入: java中引用的数据类型和spring容器中(配置文件)<bean>class=""中的
                            类是同源关系,这样的bean能够赋值给引用类型
                            同源就是一类的意思:
                            1.java类中引用类型的数据类型和bean的class的值是一样的
                            2.java类中引用类型的数据类型和bean的class的值是父子关系.
                            3.java类中引用类型的数据类型和bean的class的值是接口和实现类的关系.

        注意bean下是常规的set注入除了引用类型(它是由ByType注入)
-->

	<!--2.ByType-->
	<bean id="Student01" class="com.dyw.Ba04.Student" autowire="byType">
        <property name="name" value="丁杨维"/>
        <property name="age" value="20"/>
    </bean>

    <bean id="mSchool" class="com.dyw.Ba04.School">
        <constructor-arg name="name" value="cuit"/>
        <constructor-arg name="address" value="sccd"/>
    </bean>

spring-conetxt 和 spring-webmvc是spring中的两个模块

spring-context:是ioc功能的,创建对象的。
spring-webmvc做web开发使用的, 是servlet的升级。
spring-webmvc中也会用到spring-context中创建对象的功能的。

junit : 单元测试, 一个工具类库,做测试方法使用的。
单元:指定的是方法, 一个类中有很多方法,一个方法称为单元。

使用单元测试
1.需要加入junit依赖。

<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

2.创建测试作用的类:叫做测试类
src/test/java目录中创建类

3.创建测试方法

1)public 方法
2)没有返回值 void
3)方法名称自定义,建议名称是test + 你要测试方法名称
4)方法没有参数
5)方法的上面加入 @Test ,这样的方法是可以单独执行的。 不用使用main方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值