• Spring基础


    Spring是什么?

    Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。
    然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。
    ◆目的:解决企业应用开发的复杂性
    ◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
    ◆范围:任何Java应用
    Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。
     

    为什么学习Spring?
    1)方便解耦,简化开发
    Spring就是一个容器,可以将所有对象创建和关系维护交给Spring管理
    什么是耦合度?对象之间的关系,通常说当一个模块(对象)更改时也需要更改其他模块(对象),这就是耦合,耦合度过高会使代码的维护成本增加。要尽量解耦

    2)AOP编程的支持
    Spring提供面向切面编程,方便实现程序进行权限拦截,运行监控等功能。

    3)声明式事务的支持
    通过配置完成事务的管理,无需手动编程

    4)方便测试,降低JavaEE API的使用
    Spring对Junit4支持,可以使用注解测试

    5)方便集成各种优秀框架

    Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式如下图:

    spring之IOC?

     
    IoC容器,最主要的就是完成对象的创建以及维护对象的依赖关系等。
    所谓控制反转,包括两部分:
    一是控制,二是反转,就是把传统方式需要由代码来实现对象的创建、维护对象的依赖关系,反转给容器来帮忙管理和实现。
    所以我们必须要创建一个容器,同时需要一种描述来让容器创建对象与对象的关系。

    Spring 依赖注入(DI)

    Spring如何使用依赖注入(DO)来管理对象的依赖关系。

    1. Spring依赖注入 (DI) - Spring如何通过应用Setter注入和构造器注入的依赖注入(DI)设计模式实例
    2. Spring通过setter方法注入 - 通过setter方法依赖注入Bean
    3. Spring通过构造方法注入 - 可以通过构造方法依赖注入Bean
    4. Spring构造方法注入类型歧义 - 构造函数注入参数类型歧义的问题总是发生在一个bean包含多个构造方法有多个参数。

    Spring小案例:

      步骤一:

        导入依赖

          

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
          <version>5.1.5.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>5.1.5.RELEASE</version>
        </dependency>
      </dependencies>

      

      步骤二:

        创建applicationContext.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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">
    </beans>

      步骤三:

        创建实体类

    package com.SpringMckz.entity;

    public class Student {
    //普通属性
    private Integer stuid;
    private String stuname;
    //域属性
    private Teacher teacher;


    public Teacher getTeacher() {
    return teacher;
    }

    public void setTeacher(Teacher teacher) {
    this.teacher = teacher;
    }

    public Integer getStuid() {
    return stuid;
    }

    public void setStuid(Integer stuid) {
    this.stuid = stuid;
    }

    public String getStuname() {
    return stuname;
    }

    public void setStuname(String stuname) {
    this.stuname = stuname;
    }

    //普通方法
    public void stu(){
    System.out.println("stuid:"+stuid+" stuname:"+stuname);
    }
    }
    package com.SpringMckz.entity;
    
    public class Teacher {
        //普通属性
        private Integer tid;
        private String tname;
    
        public Integer getTid() {
            return tid;
        }
    
        public void setTid(Integer tid) {
            this.tid = tid;
        }
    
        public String getTname() {
            return tname;
        }
    
        public void setTname(String tname) {
            this.tname = tname;
        }
    }

      步骤三:

        在大配置文件中增加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">
        <!--注入bean
            id相当于当前bean唯一标识
            class是bean 的全路径
            property注入bean中的属性         必须封装
        -->
    <bean id="studentBean" class="cn.spring.entity.StudentBean">
    <property name="stu_id" value="PG-12138"></property>
    <property name="stu_name" value="王某"></property>
    <property name="teacherBean" ref="teacherBean"></property>
    </bean>


    <bean id="teacherBean" class="cn.spring.entity.TeacherBean">
    <property name="t_id" value="PG-9527"></property>
    <property name="t_name" value="刘某"></property>
    </bean>

    </beans>

      步骤四:

        测试:

      

    public class stutest {
        @Test
        public void teststu(){
            ApplicationContext atc=new ClassPathXmlApplicationContext("applicationContext.xml");
            Student student = (Student)atc.getBean("Student");
            student.stu();
            System.out.println(student.getTeacher().getTname());
        }
    }

     
  • 相关阅读:
    使用Autofac动态注入启动Api服务
    RabbitMQ学习笔记(六) RPC
    RabbitMQ学习笔记(五) Topic
    RabbitMQ学习笔记(四) Routing
    RabbitMQ学习笔记(三) 发布与订阅
    Quartz.NET学习笔记(二) Job和JobDetails
    RabbitMQ学习笔记(二) 工作队列
    Spark SQL JSON数据处理
    Hive JSON数据处理的一点探索
    由“Beeline连接HiveServer2后如何使用指定的队列(Yarn)运行Hive SQL语句”引发的一系列思考
  • 原文地址:https://www.cnblogs.com/F017/p/11732705.html
Copyright © 2020-2023  润新知