Spring 初识spring

spring简介

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

组成

在这里插入图片描述

IOC(Inversion of Control)

控制反转

通常写代码的思路:

在这里插入图片描述
这样做是传统的做法,程序员需要去创建对象,来作为业务的实现类,但是也会出现一个问题:如果用户的需求改变,那么就需要程序员去修改业务的实现代码(主体控制还是程序猿)

现在的改变

在这里插入图片描述

通过一个set方法来动态的创建对象实例,创建对象的主动权不在于程序员,而在于用户传入的是什么对象 (主体控制权就转到了用户和手中),那么这就是控制反转的原型。
通过这种做法,降低了耦合性,可专注于业务的实现上

IOC容器

在这里插入图片描述

  1. 该接口org.springframework.context.ApplicationContext代表SpringIoC容器,并负责实例化,配置和组装上述bean。
  2. 容器通过读取配置元数据来获取有关要实例化,配置和组装哪些对象的指令。
  3. 配置元数据以XML,Java批注或Java代码表示。它允许您表达组成应用程序的对象以及这些对象之间的丰富相互依赖关系。

采用XML方式配置Bean的时候,Bean的定义信息是和实现分离的,而采用注解的方式可以把两者合为一体,
Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的。
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)。

HelloSpring

1.编写JavaBean

在这里插入图片描述

2.编写配置文件

在这里插入图片描述

3.实例化对象

在这里插入图片描述

总结

hello对象是由Spring创建的
hello对象的属性是由Spring容器设置的,
这个过程就叫控制反转:
控制:谁来控制对象的创建,传统应用程序的对象是由程序本身控制创建的,使用Spring后,对象是由Spring来创建的.
反转:程序本身不创建对象,而变成被动的接收对象.
依赖注入:就是利用set方法来进行注入的.
IOC是一种编程思想,由主动的编程变成被动的接收.
可以通过newClassPathXmlApplicationContext去浏览一下底层源码 。
现在,我们彻底不用再程序中去改动了,要实现不同的操作,只需要在xml配置文件中进行修改,所谓的IoC,-句话搞定:对象由Spring来创建,管理,装配!

IOC构建的方式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

总结

在配置文件加载的时候,容器中管理的对像就已经初始化了

spring 配置

1.别名

在这里插入图片描述
也可以使用name作为别名,而且name可以创建多个
在这里插入图片描述

2.import

用于多个人开发,可以将多个配置文件合并成一个

Dependency Injection(DI)依赖注入

依赖注入(DI)是一个过程,通过该过程,对象仅通过构造函数参数,工厂方法的参数或在构造或创建对象实例后在对象实例上设置的属性来定义其依赖关系(即,与它们一起工作的其他对象)。从工厂方法返回。然后,容器在创建bean时注入那些依赖项。从根本上讲,此过程是通过使用类的直接构造或服务定位器模式来控制bean自身依赖关系的实例化或位置的bean本身的逆过程(因此称为Control Inversion)。

使用DI原理,代码更加简洁,当为对象提供依赖项时,去耦会更有效。该对象不查找其依赖项,也不知道依赖项的位置或类。结果,您的类变得更易于测试,尤其是当依赖项依赖于接口或抽象基类时,它们允许在单元测试中使用存根或模拟实现。

1.构造器注入

2.Set方式注入

依赖注入:set注入

  • 依赖:JavaBean对象创建依赖于容器
  • 注入:JavaBean对象中的属性,由容器来注入

    <bean class="com.ycm.pojo.Address" id="address">
        <property name="address" value="福建省漳州市"/>
    </bean>
    <bean class="com.ycm.pojo.Student" id="student">
        <!--第一种,普通注入-->
        <property name="name" value="张三"/>
        <!--第二种 Bean注入 使用ref-->
        <property name="address" ref="address"/>
        <!--数组注入-->
        <property name="books" >
            <array >
                <value>三国演义</value>
                <value>红楼梦</value>
                <value>水浒传</value>
                <value>西游记</value>
            </array>
        </property>
        <!--list注入-->
        <property name="hobbys">
            <list>
                <value>打球</value>
                <value>听歌</value>
                <value>写代码</value>
            </list>
        </property>
        <!--set注入-->
        <property name="games">
            <set>
                <value>王者荣耀</value>
                <value>cf</value>
            </set>
        </property>
        <!--map注入-->
        <property name="card">
            <map>
                <entry key="1" value="游戏王"/>
            </map>
        </property>
        <!--null注入-->
        <property name="wife">
            <null/>
        </property>
        <!--properties注入-->
        <property name="info">
            <props>
                <prop key="学号">123456789</prop>
            </props>
        </property>
    </bean>

3.其他方式注入

使用p命名空间方式注入(property namespace),通过属性注入
使用c命名空间方式注入(constructor namespace),通过有参构造的方式注入
在这里插入图片描述
在这里插入图片描述

bean的作用域

在这里插入图片描述

1.singleton(默认)

在这里插入图片描述
当作用域为单例时,ioc容器会创建一个共享实例,并存储在缓存中,下次对该实例的请求都将返回这个共享实例
在这里插入图片描述

2.prototype

在这里插入图片描述
每次通过getBean去获取一个实例对象的时候都会重新创建一个新的实例
在这里插入图片描述

3.其余的request,session,application只有在web中才会用到

Bean的自动装配

自动装配是Spring满足bean依赖一种方式!
Spring会在上下文中自动寻找,并自动给bean装配属性!

在Spring中有三种装配的方式

  1. 在xmI中显示的配置
  2. 在java中显示配置
  3. 隐式的自动装配bean [ 重要]

正常情况:
在这里插入图片描述

1.byName

byName会在容器中去自动查找,和自己对象set方法后面的值对应的beanId,自动设置,假设将cat改为cat1,那就会报错,因为找不到相匹配名字的set方法
在这里插入图片描述

2.byType

byType会在容器中去自动查找,和自己对象属性类型相匹配的类型,但是这个对象只能是一个,否则报错,这个对象甚至可以不要写id属性,因为就只有一个对象
在这里插入图片描述

3.使用注解实现自动装配

jdk1.5以后支持注解,spring2.5支持注解
使用注解开发会比使用xml文件开发要方便许多

配置注解的支持

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config/>

</beans>

@Autowired

实现自动装配
直接在属性上使用即可!也可以在set方式上使用,还可以应用于构造函数
使用Autowired我们可以不用编写Set方法了,前提是你这个自动装配的属性在I0C (Spring) 容器中存在,且符合名字byname! .
在这里插入图片描述
如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解[@Autowired] 完成的时候、我们可以
使用**@Qualifier(value=“xx” )**去配置@Autowired的使用,指定一个唯一的bean对象注入! .

@Resource

也可以像@Autowried那样去做自动装配,但是它和@Auutowried的区别:
都是用来自动装配的,都可以放在属性字段上
@ Autowired先通过byType的方式实现,再通过byName查找,而且必须要求这个对象存在! I
@Resource 默认通过byname的方式实现,如果找不到名字,则通过byType实现!如果两个都找不到的情况下,就报错!

@Component

组件的意思,放在类上,说明这个类被spring管理了,默认id为类名小写
在这里插入图片描述

@Value

在这里插入图片描述

@Component的衍生注解,其本质作用是一样的

在web开发中,按照mvc架构分层:

  • dao 【@Respository
  • servicee 【@Service
  • controller【@Controller
    上面注解的本质是一样的,只是作用标记在不同的层面而已,都是代表将某个类注册到Spring容器中

@Scrope

用来标记作用域
在这里插入图片描述

小结

xml与注解:

  • xml更加万能,适用于任何场合!维护简单方便
  • 注解不是自己类使用不了,维护相对复杂!

xml与注解最佳实践:

  • xml用来管理bean;
  • 注解只负责完成属性的注入;

我们在使用的过程中,只需要注意-一个问题:必须让注解生效,就需要开启注解的支持

使用Java的方式来配置spring,可以不需要写配置文件

1.需要写一个配置类
在这里插入图片描述
实现类,不同于配置文件的
在这里插入图片描述

<p> 新课上新福利:本套餐共包含 4 大课程,原价 ¥199,今日立减¥100,到手仅需¥99! </p> <p> <br> </p> <p class="MsoNormal" align="left"> <b>为什么每一个程序员都需要掌握</b><b> Java Spring </b><b>全家桶?</b><b><br> </b><b></b> </p> <p class="MsoNormal" align="left"> 1. Spring在如今Java的应用市场以及就业市场中,都成为炙手可热的部分。面试出镜率之高,市场应用之广,让其成为Java开发人员的必备技能之一,唯有系统的掌握Spring全家桶的思想、设计、以及实现,才可以让开发过程变得更容易、更高效,以适应当前市场的快速发展。 </p> <p class="MsoNormal" align="left"> <br> </p> <p class="MsoNormal" align="left"> <b>本套餐内容介绍:</b><b></b> </p> <p class="MsoNormal" align="left"> 本课程所有内容基于最新的Spring  Boot 2.2.5.RELEASE 版本,和Spring Cloud Hoxton.SR3 版本,其中大量的独家案例,以及本人多年的经验讲解。 </p> <p class="MsoNormal" align="left"> 课程循序渐进,内容中有Spring的核心基础内容,也有高级的进阶内容。 </p> <p class="MsoNormal" align="left"> 内容分为五大部分,分别是: </p> <p class="MsoNormal" align="left"> <b>初识篇</b><b>Spring Framework</b>:主要讲解Spring的核心内容IOC及AOP。本篇对Spring的基本概念进行大致的讲解,但主要的技术点皆以案例为主,同时会对项目中都会用到的日志进行讲解及案例说明。 </p> <p class="MsoNormal" align="left"> <br> </p> <p class="MsoNormal" align="left"> <b>基础篇</b><b>Spring MVC</b><b>:</b>主要以案例的方式讲解Spring的前端部分,比如表单、验证、国际化、主题、文件上传等,以及高阶内容过滤器、拦截器、多种异常处理方法 ,以及日志Log4j2及SLF4J的使用。最后,会结合SpringSpring MVC及MyBatis(即SSM)进行产品的增删改查的案例讲解。 </p> <p class="MsoNormal" align="left"> <br> </p> <p class="MsoNormal" align="left"> <b>核心篇</b><b>Spring Boot</b><b>:</b>主要以案例的方式对如何使用Spring Boot开发进行讲解,包括热部署,扩展的启动行为,整合JSON、Thymeleaf、Freemarker、JSP的Web开发,全局异常处理,配置文件的使用,及Logback&SLF4J的日志使用,国际化,最后,会结合Spring Boot及MyBatis进行产品的增删改查的案例讲解。 </p> <p class="MsoNormal" align="left"> <br> </p> <p class="MsoNormal" align="left"> <b>核心篇</b><b>Spring Cloud</b><b>:</b>以案例的方式,结合Spring Boot,对注册中心,消费者与生产者,服务的调用OpenFeign,Hystrix监控,服务网关Gateway,消息驱动微服务Stream,分布式集群,及分布式配置中心进行讲解,使得我们快速掌握微服务的开发方法。 </p> <p class="MsoNormal" align="left"> <br> </p> <p class="MsoNormal" align="left"> <b>核心篇</b><b>Spring Data</b><b>:</b>主要以案例的方式讲解持久层的开发,分别对Spring Data JPA 及 Spring Data JDBC 进行讲解。 </p> <p class="MsoNormal" align="left"> <br> </p> <p class="MsoNormal" align="left"> <br> </p> <p class="MsoNormal" align="left"> <b>学习收获:</b><b></b> </p> <p class="MsoNormal" align="left"> 1、使用 Spring MVC 快速开发; </p> <p class="MsoNormal" align="left"> 2、搞定 Spring Boot 核心的实现原理; </p> <p class="MsoNormal" align="left"> 3、通过 Spring Cloud 快速构建微服务架构; </p> <p class="MsoNormal" align="left"> 4、掌握 Spring 的使用和开发技巧。 </p> <p class="MsoNormal" align="left"> <br> </p> <p class="MsoNormal" align="left"> <br> </p> <p class="MsoNormal" align="left"> <b>讲师介绍</b><b></b> </p> <p class="MsoNormal" align="left"> 杨春娟,05年毕业于清华大学,之后致力于 JavaEE 的设计开发,12年开始致力于 Hybris 的架构、设计及开发,及管理工作。精通C/ C++,Java, JavaEE,MySql,精通SAP Hybris等,善于将复杂的问题简单化并教授给学生,善于培养学生独立思考问题的能力。 </p> <p> <br> </p> <p> <img src="https://img-bss.csdn.net/202005180944265006.png" alt=""> </p> <p> <img src="https://img-bss.csdn.net/202005080326195251.png" alt=""> </p>
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页