自学spring的第一天

一、什么是Spring框架

  • 概述

    Spring是分层的Java SE/EE应用一站式的轻量级开源框架,以IOC和AOP为内核,提供了展现层Spring MVC、持久层Spring JDBC及业务层事务管理等一站式的企业级应用技术,此外Spring还整合了开源世界里众多著名的第三方框架和类库,成为使用最多的轻量级Java EE企业应用开源框架。
    
    
    • 解决分层的javaee应用

      • 解决java经典三层架构问题

        • dao层
        • service层
        • web层
      • 具体解决什么问题

        • Spring框架提供IOC容器,去管理三个层次的对象及依赖关系,实现真正的解耦。
    • 轻量级开源框架

    • 以IOC和AOP为核心

      • IOC:控制反转容器

        • 控制反转
          • 将创建对象的权力从调用者移除,交付给一个第三方组件去处理
      • AOP

        • 面向切面编程

          • java的oop编程(面向对象编程:继承)称为纵向编程,横向编程

    在这里插入图片描述

    • 一站式的Web解决

      • SpringMVC:解决Web应用问题
      • SpringJDBC:解决持久化处理
      • 事务管理
    • 便于与第三方的优秀框架整合

      • hibernate
      • mybatis

二、Spring框架的组件框架

在这里插入图片描述

  • Core Container:IOC容器

    • 加载beans.jar
    • 加载core.jar
    • 加载context.jar
    • 加载Spel.jar
  • 支持aop编程

    • spring-aop-5.1.9.RELEASE.jar
    • spring-aspects-5.1.9.RELEASE.jar
  • 支持spring mvc应用

    • spring-web-5.1.9.RELEASE.jar
    • spring-webmvc-5.1.9.RELEASE.jar
  • 支持数据库访问

    • spring-jdbc-5.1.9.RELEASE.jar
    • spring-orm-5.1.9.RELEASE.jar
  • 支持事务管理

    • spring-tx-5.1.9.RELEASE.jar

三、什么是IOC

  • 控制反转
    • 对象的管理本身是调用者处理,将控制权力交付给第三方容器,此容器就是IOC容器

四、编写第一个IOC应用程序

1、需求

  • 就是IOC容器的使用

2、加载ioc容器的lib文件

  • 注意要导入log库文件
    在这里插入图片描述

3、编写一个bean类

  • 编写一个Car.java类
package com.gec.bean;

/*
* 定义一类:配置bean
* */
public class Car {

    private String name;
    private String color;
    private Double price;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Car{" +
                "name='" + name + '\'' +
                ", color='" + color + '\'' +
                ", price=" + price +
                '}';
    }
}

4、在src新建beans.xml文件

  • xml文件就是定义ioc容器配置那些bean对象

在这里插入图片描述

<?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">

    <!--car的bean对象-->
    <!--
        什么是bean对象?
        受ioc容器所管理的对象
    -->
    <bean id="car" class="com.gec.bean.Car">
        <!--注入属性值-->
        <property name="name">
            <value>宝马</value>
        </property>
        <property name="color">
            <value>红色</value>
        </property>
        <property name="price">
            <value>2000000.00</value>
        </property>
    </bean>


</beans>

5、获取IOC容器对象

  • ApplicationContext类对象描述IOC容器

  • 如何创建IOC容器对象

    • 根据bean.xml文件,创建IOC容器

      ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
      
  • 获取bean对象

    //根据bean id,从IOC容器获取bean对象,
            Car carObj= (Car) ctx.getBean("car");
    
            System.out.println(carObj);
    

五、DI注入

1、简介

  • 针对bean对象的属性进行数据值注入

2、注入方式

  • 通过构造器赋值
  • 通过set方法赋值
  • 通过工厂方法赋值

3、通过构造器赋值

  • 如何使用

    • constructor-arg标签实现构造器赋值
  • 举例

        <bean id="car01Id" class="com.gec.bean.Car">
            <!--针对构造器第一个参数赋值-->
            <constructor-arg name="name" index="0" type="java.lang.String">
                <value>QQ跑车</value>
            </constructor-arg>
            <!--针对构造器第二个参数赋值-->
            <constructor-arg name="color" index="1" type="java.lang.String">
                <value>绿色</value>
            </constructor-arg>
            <!--针对构造器第三个参数赋值-->
            <constructor-arg name="price" index="2" type="java.lang.Double">
                <value>200000.00</value>
            </constructor-arg>
        </bean>
    

4、通过set注入

  • 条件

    • 要有缺省构造器
    • 属性必须有对应的set方法
  • 举例

        <!--set方法注入数据-->    <bean id="car02Id" class="com.gec.bean.Car">        <property name="name">            <value>小鹏汽车</value>        </property>        <property name="color">            <value>红色</value>        </property>        <property name="price">            <value>2000000.00</value>        </property>    </bean>
    

5、通过工厂方法注入

  • 简介

    • 工厂肯定就是产生对象的
  • 非静态工厂方法

    • 定义一个工厂类,定义行为方法创建Car对象

      package com.gec.factory;import com.gec.bean.Car;/** 定义一个工厂类* */public class CarFactory {    /*    * 创建Car对象    * */    public Car createCar()    {        Car c=new Car();        c.setName("特斯拉");        c.setColor("红色");        c.setPrice(300000.00);        return c;    }}
      
    • 在beans.xml文件,定义一个工厂bean

      • factory-bean :要配置工厂bean id
      • factory-method:调用此bean对象,此对象值就是工厂的方法的返回值决定的
          <!--配置工厂类的bean对象-->    <bean id="carFactory" class="com.gec.factory.CarFactory" />    <bean id="car3Id" factory-bean="carFactory" factory-method="createCar"/>
      
  • 静态工厂方法

    • 定义一个工厂类的静态方法,此静态方法创建Car对象

      package com.gec.factory;import com.gec.bean.Car;/** 定义一个工厂类* */public class CarFactory {	/*	定义静态方法	*/    public static Car createCarStatic()    {        Car c=new Car();        c.setName("特斯拉Model three");        c.setColor("红色");        c.setPrice(400000.00);        return c;    }}
      
    • 在beans.xml文件,配置bean对象

      <bean id="car4Id" class="com.gec.factory.CarFactory" factory-method="createCarStatic" />
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值