Spring入门-IoC

Spring第一天学

Spring概述
  • Spring是什么
    • Spring介绍
      Spring是分层的Java SE/EE应用full-stack轻量级开源框架
    • Spring中的两大核心
      IoC(Inverse Of Control)反转控制
      AOP (Object Oriented Programming)面向切面编程
  • 为什么选用Spring
    • Spring发展历程及优势
      1. 方便解耦,简化开发
      2. AOP编程的支持
      3. 声明式事务的支持
      4. 方便程序的测试
      5. 方便集成优秀框架
      6. 降低JavaEE API使用难度
      7. 源码是经典的范例
  • Spring是怎么做的
    • Spring体系结构
      IoC是Spring的核心
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3BLhARD7-1581392182625)(en-resource://database/2990:2)]
程序的耦合及解耦
  • 耦合及解耦
    做到编译器不依赖,运行时才依赖,
    1. 可以通过反射的方式创建对象
    2. 通过配置获取穿件对象的权限类名
  • 工厂模式解耦
IOC及Spring中的IOC
  • IoC 把创建对象的权利交给框架或工厂,是框架的重要特征,并非面向对象编程的术语。包括依赖注入(Dependency Injection)和依赖查找(Dependency lookup),削减程序耦合。
Spring基于XML的IoC
  • Spring中基于XML的IOC环境搭建
    • Spring中的IoC
      只能解决程序耦合,没有其他的作用。
    • Spring核心容器的两个接口
      • ApplicationContext
        在构建核心容器时,创建对象采用的策略是立即加载方式,即读取配置文件后立即创建配置中的对象。适用于单例对象
      • BeanFactory
        创建对象的策略是延迟加载的方式,即再用到对象的地方创建对象,适用于多例对象
  • spring管理对象
    • 创建bean的三种方式

      1. 使用默认构造方式创建
        spring配置文件中只有idclass属性,采用默认构造函数创建bean对象,此时如果类中没有默认构造函数则对象创建失败。
      <bean id="exampleBean" class="examples.ExampleBean"/>
      
      <bean name="anotherExample" class="examples.ExampleBeanTwo"/>
      
      1. 使用某个类中的方法创建对象
        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KZCCHJ5D-1581392182636)(en-resource://database/2994:1)]
      2. 使用某个类中的静态方法创建对象
        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WjC8MyOS-1581392182638)(en-resource://database/2996:1)]
    • bean对象的作用范围
      bean标签的scope属性指定作用范围
      取值有
      singleton :单例的(默认值)
      prototype:多例的
      request:作用于应用的请求范围
      session:作用于web的会话范围
      global-session:作用于集群环境的会话范围(全局会话范围),不是集群环境通session,具体的应用案例是登陆网页时,请求经过负载均衡后,可能访问到多台服务器,此时如果只有某台服务器上有session,那么在响应请求做验证码比较时,同时存在多台服务器
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4UVFBTmd-1581392182640)(en-resource://database/3002:1)]

    • bean对象的生命周期

    1. 单例对象
      出生:创建容器时出生
      活着:只要容器在,对象一直或者
      死亡:容器销毁,对象销毁
      总结:单例对象生命周期和容器相同
    2. 多例对象
      出生:使用对象是创建
      活着:使用过程中一直或者
      死亡:由java垃圾回收机制回收
依赖注入(Dependency Injection)
什么是依赖注入

IoC作用是程序间的耦合,管理程序之间的依赖关系,由Spring提供依赖,只需要在配置文件中配置
依赖关系的维护就称之为依赖注入

能注入的数据
1. 基本类型和String
2. 其他的Bean类型(配置文件中或注解中配置过的bean)
3. 复杂类型/集合类型
注入的方式
1. 使用构造函数提供

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d6Eghiuf-1581392182643)(en-resource://database/3008:1)]

在bean标签中内部使用constructor-arg标签,标签中可以有如下属性
type用于指定注入的数据的数据类型,该数据类型是构造函数中某个或某些参数的类型
index用于为构造函数中指定索引位置的参数注入数据,索引从0开始
name用于指定构造函数中指定名称的参数注入数据
value提供数据,可以提供基本类型或者Stirng类型
ref提供其他bean类型的数据,指的是在spring的IoC容器中出现过的bean对象
特点
使用该种方式创建对象时,必须注入数据,否则无法创建bean对象。
弊端:改变了bean对象实例化的方式,在创建对象时,即使用不到这些数据也必须提供。
2. 使用set方法提供
在bean标签内部使用property标签,包含如下属性
name指定set方法名称
value提供数据,可以提供基本类型或者Stirng类型
ref提供其他bean类型的数据,指的是在spring的IoC容器中出现过的
特点
创建对象时没有明确的限制,可以直接使用默认构造方法创建对象
弊端:如果某个成员数据必须初始化值,使用该方法不能强制进行限制
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gNkUtVW9-1581392182644)(en-resource://database/3012:1)]
3. 使用注解提供
复杂类型数据的注入
property标签或者constructor-arg标签下添加子标签
例如array标签添加数组类型的数据,每个数据用value标签指定
list添加list类型数据
set添加set类型数据
map添加map类型数据,通过entry标签指定键值

<map>
    <entry key="" value=""></entry>
    <entry key="">
        <value> AAA <value>
    </entry>
</map>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iWR0L0OC-1581392182646)(en-resource://database/3014:1)]

用于list结构集合注入的标签 list array set
用于Map结构集合注入的标签 map properties
结构相同,标签可互换
业务层调用持久层
Bean在计算机领域有可重用组件的意思
JavaBean 用java语言编写的可重用组件

Spring第二天学习

Spring基于注解的IcO

实现的功能和基于XML的方式是一样的,都是为了降低程序间的耦合
使用基于注解方式的IoC,需要在XML文件中配置注解相应的属性,并指定要扫描的包。

  1. Spring中常用的注解

    • 用于创建对象的注解
      @Component
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k8R4xhVv-1581392330112)(en-resource://database/3016:1)]

      作用:用于把当前类对象存入Spring容器
      属性
      value:用于指定bean中的id,缺省时为当前类名,且首字母小写

        ```
        @Cimponent(value = "id")
        @Component("id") //只有一个value可以省略`value`
        ```
      

    @Controller 一般用在表现层
    @Service一般用在业务层
    @Repository一般用于持久层
    上述三者的功能与@Component作用相同

    • 用于注入数据的
      @Autowired
      作用:按照类型注入,只要容器中有唯一的一个bean对象和注入的变量类型匹配,则可以注入成功
      如果容器中没有可以匹配类型的对象,则报错
      如果容器中包含多个可以匹配的对象,则根据注入变量的变量名尝试匹配筛选出的对象id注入
      位置:可以在变量上,也可以在方法上
      细节:在使用注解注入时,set方法就不是必须的了

      @Qualifier
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WmgE7OEm-1581392330114)(en-resource://database/3020:1)]

      作用:在按照类型注入的基础上再按照名称注入。在给类成员注入时不能单独使用,但是给方法参数注入时可以单独使用
      属性:
      value:指定注入bean的id
      使用:再给类成员注入时,需要结合@Autowired
      @Resource
      作用:根据bean的id直接注入,可以独立使用
      属性:
      name:用于指定bean的id
      @Value
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hCdWey36-1581392330115)(en-resource://database/3018:1)]

      作用:注入基本类型、String类型的数据
      属性:
      value:注入的数据,可以使用spring中的SpEL(spring 的el表达式)

      @Autowired @Qualifier @Resource以上三种注解只能注入其他bean类型的数据,不能注入基本数据类型以及String类型的数据
      集合类型的注入只能通过xml方式实现

    • 改变作用范围的
      @Scope
      作用:指定bean的作用范围
      属性:
      value: singleton prototype 缺省值singleton

    • 生命周期相关
      @PostConstruct
      作用:指定初始化方法
      @PreDestroy
      作用:指定销毁方法

  2. 使用XML及注解方式实现表单的CRUD操作
    持久层技术选择:dbutils

  3. Spring和Iunit整合
    Junit单元测试中,没有main方法
    Juni集成了一个main方法,该方法会判断当前类中哪些方法有@Test注解,有注解的方法自动运行
    Spring导入Junit配置步骤

    1. 导入Spring整合的Junit的jar包(坐标)
    2. 使用Junit提供的一个注解替换原有的main方法,替换为Spring提供的@Runwith
    3. 告知Spring的运行器,Spring和IoC的创建是基于xml还是注解的,并且说明位置@ContextConfiguration
      location指定xml文件的位置,加上classpath关键字,表示在类路径下
      classes指定注解类所在位置

    使用Spring5.x版本的时候,要求Junit的版本必须是4.12及以上

  4. 基于注解的配置类取代XML配置
    @Configuration
    作用:指定当前类是一个配置类
    @ComponentScan
    作用:通过注解指定spring在创建容器时要扫描的包
    属性:value basePackages用于指定要扫描的包
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LKKj4JF3-1581392330129)(en-resource://database/3024:1)]
    @Bean
    作用:将当前方法的返回值作为bean对象存入到spring的IoC容器中
    属性:name对象的id,默认值为当前方法的名称
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1UhjXApu-1581392330131)(en-resource://database/3028:1)]
    @Import
    作用:导入其他的配置类到当前配置类,当前的类为父配置类
    属性:value
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eBBCPkzQ-1581392330135)(en-resource://database/3032:1)]
    @PropertySouorce
    作用:指定properties文件路径
    属性:value指定文件名称及路径,关键字classpath表示类路径下
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-suzzFGiK-1581392330136)(en-resource://database/3036:1)]
    采用SpEL表达式读取配置文件
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-leUVX51w-1581392330139)(en-resource://database/3040:1)]

    其他细节:

    • @Configuration注释的省略
      在如下方式创建容器时,即显示地声明配置类,可以省略标签
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-igjB56vo-1581392330140)(en-resource://database/3030:1)]
发布了7 篇原创文章 · 获赞 0 · 访问量 2193

猜你喜欢

转载自blog.csdn.net/qq_41603165/article/details/104260420