Spring学习笔记(一)——初识Spring

一、Spring是什么

  Spring是用来处理对象的创建、以及对象之间依赖关系的一个开发框架。它打破了我们传统开发的观念,我们不再需要像以前那样在具体的类中创建具体的对象,而是将对象的创建交给它去完成。Spring框架可以和其他框架一起整合使用,如hibernate、mybatis等。

1.1 Spring的框架图

      1)SpringCore:是Spring的核心功能:IOC容器,解决对象创建及依赖关系。(本篇文章主要介绍这个)

      2)SpringWeb:Spring对web模块的支持。

      3)Spring DAO:是Spring对Jdbc操作的支持。

      4)Spring ORM:是Spring对ORM的支持。

      5)SpringEE:Spring对javaEE其它模块的支持。

      6)Spring AOP:(这个还不是很理解 之后补充)。

1.2 控制反转(Inversion On Control)

   控制反转简称IOC,对象的创建交给外部容器自动完成,这个就叫做控制反转。在Spring中,我们可以通过<bean>标签(也可以通过注解)把对象注册到Spring的IOC容器中,然后需要这个对象的时候就交给Spring的IOC容器去创建(一般用注解创建)。

1.3 依赖注入(Dependency Injection)

  依赖注入简称DI,用于处理对象之间的依赖关系。例如我们在Spring的IOC容器中通过<bean>标签注册了一个自定义类,这时候我们又想再注册另一个类,这个类的成员变量是我们之前注册的自定义的类,那么我们就可以通过依赖注入把自定义类和这个类关联起来。

二、Spring怎么用

先来一个简单的实例:

2.1 导包

我用的maven所以直接在pom.xml文件中导入了spring所需的依赖:

依赖的代码:

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <!--引入spring核心依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
        <version>4.3.8.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.3.8.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.8.RELEASE</version>
    </dependency>
      <!--spring test相关依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>4.3.8.RELEASE</version>
    </dependency>
    
  </dependencies>

2.2 然后创建文件夹

上图红框2表示要创建的文件夹,然后右键resource->Build Path->Use as Source Folder (如红框1)

2.3 springContext.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
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
   
  
</beans>

导入头文件(spring官网有)

2.4 写一个User类

2.5 在springContext.xml 文件中注册User:

2.6 写个测试类测试一下:

结果:

以上通过一个很简单的例子我们可以看到springIOC的功能,即把我们自己定义的类注册到spring容器中,然后在需要它的时候通过容器去装载而不用我们手动去new一个。接下来对spring的对象创建和依赖关系做详细讲解。

三、IOC容器深入理解

Spring IOC容器,是Spring的核心内容,用于创建对象和处理对象间的依赖关系,一般用xml文件声明。

先来解释一下<bean>标签。<bean>标签在springIOC容器中其实就是代表着对象类,java中的类可以通过<bean>标签注册到springIOC容器中。

3.1 <bean>标签中的属性说明:

  • id:表示对象在springIOC容器中的唯一标识。
  • class :表示对应关联的java类,要写类的全限定名。
  • scope:有两个选择 1."prototype" 2."singleton" 。当scope="prototype"时 表示多例,即每次我们通过IOC容器创建的java对象都是不一样的,当scope="singleton"时 表示单例,即每次我们通过IOC容器创建的java对象都是同一个。scope属性默认为singleton。
  • lazy-init:延迟初始化bean对象,默认值为false,即不延迟创建bean对象,在程序启动时就在IOC中创建bean对象;若其值为true则延迟创建bean对象,即在我们需要对象时才在IOC容器中创建该对象。此属性只对单例bean对象有效。
  • 2.init-method:可以给该属性传递一个在pojo对象中创建的方法例如A方法的方法名A作为init-method的属性值,表示当该pojo对象在IOC容器中被创建后就立刻执行这个A方法。
  • 3.destoy-method:同上,给该属性传递一个在pojo对象中创建的方法例如B方法的方法名B作为destoy-method的属性值,表示当IOC容器被销毁时(该pojo对象也会在IOC中销毁)会立刻调用这个B方法。

3.2 IOC容器中对象的创建

利用IOC容器创建对象的方式有以下几种:1.调用无参数构造器。2.调用带参数构造器。3.工厂创建对象。包括工厂类的静态方法创建对象和工厂类的非静态方法创建对象。

3.2.1 调用无参构造器

3.2.2 调用带参构造器

<constructor-arg> 标签还有一个ref属性,可以指向IOC容器中的对象, 如下:

3.2.3 工厂创建对象

先创建工厂类:

  • 用工厂类的静态方法创建User对象

  • 用工厂类的非静态方法创建User对象

3.3 通过注解的方式在SpringIOC容器中注册对象

前面我们都是通过<bean>标签来在IOC容器中注册对象,这里来介绍一个超级方便的方法,即用注解来注册对象,

步骤:

      1.先引入context名称空间

      2.开启注解扫描

      3.使用注解:通过注解的方式,把对象加入到IOC容器中。

  • 首先在IOC配置文件中引入context名称空间,即在<beans>全局标签中添加xmlns:context="http://www.springframework.org/schema/context"属性。

即:

  • 开启注解扫描:

  • 通过注解的方式注入:

在之前定义的User类上加上@Component("user")注解 在容器配置文件中就不用<bean>去注册了

说明:利用@Compenent注解的方式是通用的将对象加入到IOC容器中的方式,而有时候我们需要区别各层对象添加的方式,所以这里我们将Dao层对象添加到IOC容器的注解方式改为:@Repository表示持久层的组件;修改Service层对象添加到IOC容器的注解方式:@Service表示业务逻辑层的组件;修改Servlet层对象添加到IOC容器的注解方式为:@Controller表示控制层的组件。

 

3.4 处理对象的依赖关系

在IOC容器的配置文件中有5种给对象注入属性的方法:1.通过构造方法。2.通过set方法给属性注入值。3.p名称空间。4.自动装配。5.注解。这里主要讲解第1、2、5中方法。

3.4.1 通过构造方法注入属性

3.4.2 通过set方法注入属性

value也可以用ref代替 引用IOC容器中的其他对象

3.4.3 通过注解方式在java类中注册属性

用@Autowired注解 可以根据对象的类型自动装配,如:

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值