Spring入门---几分钟带你了解Spring框架


一、什么是Spring

Spring是一个分层的Java SE/EE full-stack(一站式)轻量级开源框架,以IoC(Inverse Of Control:控制反转)和 AOP(Aspect Oriented Programming:面向切面编程)为内核。

在java三层架构当中分别提供了相应技术:

IOC容器:整个项目,所有的对象都交给IOC

表现层(web层) :SpringMVC 框架

业务层(service层) :AOP(日志记录,事务…)

持久层(dao层) :JdbcTemplate模板对象以及提供了ORM模块整合其他优秀的持久层技术


二、Spring的优势是什么

  • 方便解耦,简化开发 :Spring 就是一个大工厂,可以管理所有对象的创建和依赖关系维护,交给Spring管理

  • AOP 编程的支持 :可以方便的实现对程序进行权限拦截,日志记录,运行的监控

  • 声明式事务的支持 :通过配置方式完成对事务的管理,无需手动编程

  • 方便程序的测试 :对Junit支持,可以通过注解方便的对Spring程序进行测试

  • 整合外部优秀技术 : Spring内部提供了对各种优秀框架(Hibernate,Mybatis,Quartz等)的直接支持

  • javaEE技术的封装 :Spring对javaEE开发当中复杂难用的API(JavaEmail, RMI等)进行封装,降低了这些API的使用难度


三、Spring体系结构

如果作为一个整体,这些模块为你提供了开发企业应用所需的一切。但你不必将应用完全基于Spring框架。你可以自由地挑选适合你的应用的模块而忽略其余的模块。
在这里插入图片描述


四、什么是IOC

IOC:Inverse Of Control 控制反转
简单来说就是把复杂系统分解成相互合作的对象,这些对象类通过封装以后,内部实现对外部是透明的,从而降低了解决问题的复杂度,而且可以灵活地被重用和扩展

重点:借助第三方工具实现具有依赖关系对象之间的解耦

在这里插入图片描述


五、怎么搭建SringIOC

随意准备两个实体类:phone1、phone2

public class Phone1{
    private String name;
    
    public void send(){
        System.out.println("phone1发送了");
    }
    public void call(){
        System.out.println("phone1呼叫了");
    }
}
public class Phone2 {
    private String name;

    public void send(){
        System.out.println("phone2发送了");
    }
    public void call(){
        System.out.println("phone2呼叫了");
    }
}

1、导入依赖

在pom.xml文件下添加

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.17.RELEASE</version>
    </dependency>
</dependencies>

2、创建Spring配置文件,将实体类(bean)托管到Spring

新建一个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
        https://www.springframework.org/schema/beans/spring-beans.xsd">


    <!-- 把HuaWei、Mi 交给spring 创建
        class  完全限定名 (包名 + 类名)
        id     在spring容器中的唯一标志,id属性值不能相同
     -->
    <bean class="com.entity.phone1" id="phone1"></bean>
    <bean class="com.entity.phone2" id="phone2"></bean>
</beans>

3、使用ClassPathXmlApplicationContext对象解析配置文件、getBean方法获取对象

 @Test
    //测试从spring获取手机
    //由spring来负责各个对象的创建。
    //测试类不需要手动创建Phone2 、Phone1,从而降低耦合度
    public void test(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("applicationContext.xml");
        Phone1 phone1= (phone1) context.getBean("phone1");
        Phone1.send();
        Phone2 phone2= (Phone2 ) context.getBean("phone2");
        phone2.call();
    }

六、什么是依赖注入

依赖注入(Dependency Injection):它是 Spring 框架核心 IOC 的具体实现。

简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取


七、Spring的几种依赖注入方式

随便建一个实体类:Person

public class Person {

    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void show(){
        System.out.println("我的名字叫"+name+",今年我"+age+"岁");
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

1、通过set方法

在applicationContext.xml文件下

<!--    调用无参构造方法-->
 <!-- 依赖注入 -->
    <bean class="com.entity.Person" id="person">
        <!-- 使用setter方法注入 -->
        <property name="name" value="小红"></property>
        <property name="age" value="18"></property>
    </bean>

测试

 @Test
    public void test(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Person person = (Person) context.getBean("person");
        person.show();
    }

运行结果
在这里插入图片描述

2、通过构造方法

在applicationContext.xml文件下

 <!-- 依赖注入 -->
    <bean class="com.ujiuye.demo3.Person" id="person">
       <!-- 第二种依赖注入的方式,通过构造方法进行赋值
            属性name  :  构造方法中参数的名字
            属性value :  需要注入的数据
            属性index :  指定参数的索引 索引从0开始算
            属性type  :  指定参数的类型
  -->
        <constructor-arg type="java.lang.String" index="0" name="name" value="小绿"></constructor-arg>
        <constructor-arg type="int" index="1" name="age" value="9"></constructor-arg>
      
    </bean>

测试

 @Test
    public void test(){

        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Person person = (Person) context.getBean("person");
        person.show();
    }

运行结果
在这里插入图片描述

3、注解注入


八、Spring模块化配置

为什么需要模块化,因为如果一个applicationContext配置文件里面包含所有的bean,会让applicationContext很臃肿,即让这个文件数据变得庞大,又影响后期维护,所以,Spring提供了多配置文件的方式:

1、并列多个配置文件

在创建ApplicationContext对象的时候,直接传入多个配置文件

ApplicationContext act = new ClassPathXmlApplicationContext("beans1.xml","beans2.xml","...");

2、主从配置文件

先配置一个主配置文件(一般为applicationContext.xml文件),然后在里面导入其它的配置文件

<import resource="beans1.xml" />
<import resource="beans2.xml" />
  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lichaohua!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值