Spring基础

时间:2019-10-24
本文章向大家介绍Spring基础,主要包括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+"\tstuname:"+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());
    }
}
 

原文地址:https://www.cnblogs.com/F017/p/11732705.html