Spring框架基础看这一篇就够

第一章Spring的概念

spring全家桶:Spring, SpringMVC, SpringBoot, SpringCloud

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

1.轻量

Spring框架使用的jar都比较小,一般在1M一下或者几百kb。Spring核心功能的所需的jar总共在3M左右,Spring框架运行占用的资源少,运行效率高,不依赖其他jar。

2.针对接口编程,解耦合

Spring提供了loc控制反转,由容器管理对象,对象的依赖关系,原来在程序代码中的对象创建方式,现在由容器完成,对象之间的依赖解耦合。

3.AOP编程的支持

通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付,在Spring中,开发人员可以从繁杂的事务管理代码中解脱出来,通过声明方式灵活地进行事务管理,提高开发效率和质量

4.方便集成各种优秀框架

Spring不排斥各种的开源框架,相反Spring可以降低各种框架的使用难度,Spring提供了对各种框架如(Struts,Hibernate,MyBatis)等的直接支持,简化框架的使用,Spring像插线板一样,其他框架是插头,可以容易的组合到一起,需要使用哪个框架,就把哪个框架放入插线板,不需要可以轻易的移除。

第二章IOC控制反转

Spring框架第一个核心功能ioc

IOC(Inversion of Control):控制反转,是一个理论,概念,思想。把对象的创建,赋值,管理工作都交给代码之外的容器实现。

控制含义:创建对象,对象属性的赋值,对象之间的关系管理。

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

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

public static void main(String args[]){

        Student   student = new  Student();//在代码中,手动创建对象=正转

}

Q:为什么要使用ioc?

目的是减少代码的改动,也能实现不同的功能。

IoC的技术实现

DI是ioc的技术实现

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

IDEA中实现Spring

1.创建maven项目

 2.加入依赖,maven依赖,spring依赖,junit依赖

 <!--spring依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>

3.创建类(接口和他的实现类),和没有使用框架一样,就是普通的类

 

4.创建Spring需要使用的配置文件,声明类的信息,这些类由Spring创建和管理

选中resources资源文件夹-->alt+Insert-->直接敲xml-->XML Configuration File-->Spring Config

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--
      声明bean,就告诉spring要创建某个类的对象
      id:对象的自定义名称(唯一值),spring通过这个名称找到对象
      class:类的全限定名称(不能是接口,spring底层采用反射机制创建对象,接口不可以创建对象)

      spring把创建好的对象放到map集合中,spring框架有一个map集合存放对象
      key=id部分
      value=class部分
      一个bean标签声明一个对象
    -->

    <bean id="someService" class="com.bjpowernode.dao.impl.SomeServiceImpl"/>
</beans>
<!--
spring的配置文件
1.beans:是根标签,Spring把java对象叫做bean
2.spring-beans.xsd 是约束文件,和mybatis指定 dtd是一样的
-->

5.创建测试类

在test里创建测试类

public class MyTest {
    @Test
    public void test01(){
    //不使用Spring框架
    //需要手动new对象
    SomeServiceImpl someService = new SomeServiceImpl();
    someService.doSome();
    }

    @Test
    public void test02(){
        //使用Spring框架
        //不需要手动new对象,使用spring容器创建对象
        //1.指定spring配置文件
        String beans = "beans.xml";
        //2.创建spring容器对象,ApplicationContext
        //ApplicationContext就是表示Spring容器,通过容器获取对象
        //ClassPathXmlApplicationContext:表示从类路径加载Spring的配置文件
        ApplicationContext ac = new ClassPathXmlApplicationContext(beans);
        //3.通过getBean()方法获取需要的对象,参数是你spring配置文件bean标签的id
        SomeService someService = (SomeService) ac.getBean("someService");
        someService.doSome();


    }
}

ac.getBeanDefinitionNames()//方法返回Spring配置文件中的所有对象,返回一个数组

ac.getBeanDefinitionCount()//方法返回一个整数,返回spring配置文件创建的对象个数

利用spring自带功能给java对象属性赋值

使用spring中的注解,完成属性赋值,叫做基于注解的id实现

di的语法分类:

1.set注入(设置注入):spring调用类的set方法,用set方法可以实现属性赋值

Spring调用了类的set方法,给对象赋值,name是对象的属性名,value是对象的属性值

一个propert标签只能给一个属性赋值,不管是整型还是其他类型必须用""号

<bean id="mystudent" class="com.bjpowernode.bean01.Student">
        <property name="name" value="云英"/>
        <property name="age" value="20"/>
    </bean>

自定义类型

定义一个School类型的属性

 school属性的值是一个对象,直接用ref引用,<bean>id就可以

<bean>id就是一个对象

 测试类运行效果

2.构造注入:spring调用类的有参数构造方法,在创建对象的同时,在构造方法中完成赋值

构造注入使用<constructor-arg>标签

<constructor-arg>标签:一个<constructor-arg>表示构造方法一个参数

<constructor-arg>标签属性:

name:表示构造方法的形参名

index:表示构造方法的参数的位置,参数从左往右位置0,1,2的顺序

value:构造方法的形参类型是简单类型的,使用value

ref:构造方法的形参类型是引用类型的,使用ref

 <!--使用name属性实现构造方法注入-->
    <bean id="mystudent" class="com.bjpowernode.bean03.Student">
      <constructor-arg name="myname" value="貂蝉"/>
        <constructor-arg name="myage" value="26"/>
        <constructor-arg name="myschool" ref="myschool"/>

    </bean>
   <bean id="myschool" class="com.bjpowernode.bean03.School">
       <property name="name" value="北京大学"/>
       <property name="address" value="海淀区"/>
   </bean>

测试代码:

   /*
    * 有参数构造方法注入
    * */
    @Test
    public void test04(){
        String ing = "bean03/applicationContext.xml";
        ApplicationContext ac = new ClassPathXmlApplicationContext(ing);
        Student mystudent = (Student) ac.getBean("mystudent");
        System.out.println(mystudent);
    }

-----------------------------------------------------------------------------------

引用类型的自动注入:

spring框架根据某些规则可以给引用类型赋值,不用手动手动再给引用类型赋值了,

使用的规则常用的是byName,byType

byName(按名称注入):java类型引用类型的属性名和spring容器中(配置文件)<bean>的id名称一致,且数据类型一致,这样容器中bean,spring能够赋值给引用类型

 byTypr(按类型注入):java类中的引用类型的数据类型和spring容器中(配置文件)<bean>的class属性是同源关系,这样bean能够赋值给引用类型。

同源的意思是:

1.java类中引用类型的数据类型和bean的class的值是一样的。

2.java类中引用类型的数据类型和bean的class的值是父子关系的。

 3.java类中引用类型的数据类型和bean的class的值是接口和实现类的关系。

----------------------------------------------------------------

项目开发中,能更好的管理对象,采用一个模块一个配置文件,再用一个总配置文件,把他们串起来,如图

  总结

Q:什么是Spring?

是一个框架,核心技术是ioc,aop,实现解耦合,

spring是一个容器,容器中存放的是java对象,需要做的是把对象放到容器中

Q:怎么使用Spring?

把项目中的对象放入容器中,让容器完成对象的创建对象之间的管理(属性赋值),我们在程序中从容器中获取对象

Q:什么样的对象放到容器中?

dao类,service,controller类,工具类,使用xml文件,bean标签,spring中的对象默认都是单例的,在这个容器中叫这个名字的对象只能有一个。

Q:什么不方法到spring容器中?

1.实体类对象,实体类数据来自数据库

2.servlet,listener,filter等

Q:什么是ioc反转控制?

1.ioc反转是一个理论思想概念,指到开发人员在容器之中代码之外管理对象,给对象赋值,管理依赖。

2.ioc技术实现使用的di(依赖注入):开发人员在项目中只需要提供对象的名称,对象的创建,赋值,管理都由容器内部实现。

3.spring使用的di技术,底层使用的是反射机制

4.di给属性赋值,set注入和构造方法注入

Q:使用Spring的实现步骤?

1.加入依赖

 <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>

2.创建类

3.创建Spring的配置文件,使用<bean>声明对象

4.我们使用容器中的对象,通过ApplicationContext接口和他的实现类ClassPathXmlApplcactionContext的getBean()

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有腰的嘟嘟嘟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值