Spring全家桶之Spring入门

综述: Spring是为了 解决企业级应用开发的复杂性而创建的,是非侵入性的,不依赖于spring的API,通过AOP实现面向面片编程,通过依赖注入控制反转IOC,对象不需要直接创建。

侵入式与非侵入式简单区别:
侵入式就是在使用框架的时候继承或者实现框架的类或接口,侵入式对框架的依赖很高,不利于代码的复用。
非侵入式就是不继承或实现类或接口就能实现自己想要的结果,如之前学的Hibernate框架。

Spring的有点有哪些?
1、简化Java的开发
2、基于POJO轻量级和最小侵入式开发
3、通过依赖注入和面向接口实现松耦合
4、基于切面和惯例进行声明式编程
5、通过切面和模板减少样板式代码
6、方便集成其他框架(如MyBatis、Hibernate)
另外,Spring对javaEE开发中非常难用的一些API(JDBC、远程调用等)都进行了封装,是这些API应用难度降低。

Spring模块
在这里插入图片描述
可以看到,一共有六个模块
1、Spring核心容器
是Spring中最重要的部分,管理者bean的创建、配置和管理,除此之外还包括bean工厂和多种Spring应用上下文的实现。

2、AOP模块
对面向编程提供了很好的支持,帮助对象进行解耦。

3、数据集成与访问
对JDBC进行了更好的封装,避免啦编写臃肿的连接、创造等语句。

4、Web与远程调用
它的Web和远程 调用模块自带了一个强大的MVC框架,有助于在Web层提升应用的松 耦合水平。

5、Test
Test模块支持使用JUnit和TestNG对Spring组件进行测试。

二、Spring IOC与DI

IOC:Inverse of Control(控制反转),IOC只是一种思想,并不是具体的技术,就是将原本在程序中手动创建对象的控制权,交由Spring框架来管理。更具体来说就是,当需要使用某个对象的时候,不自己去创建,而是通过Spring容器来创建,至于Spring容器是如何创建的则不用理会。

IOC控制反转实例:有一个公司A需要招收Java程序员,正常的是A公司直接进行招收符合自己要求的员工;而控制反转则是A公司需要招人,单是A公司不亲自来招收,而是通过第三方人才市场根据A公司的要求筛选出来的人里面直接拿来使用就行了,至于人才市场是如何执行招收的,A公司不用去管,这其实就是IOC思想。总之,一句话:控制反转,把对象创建交给spring进行配置。

例子
创建一个SpringTest1类的bean

public class SpringTest1 {
    private String name;

    public String getName() {
        return name;
    }

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

    public void sayHello(){
        System.out.println("Hello World!" );
    }
}

然后在applicationContext.xml中配置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 class="com.SpringTest1" id="springTest1">
        <property name="name" value="ForMe"/>
    </bean>
</beans>

测试类

public class Test {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        SpringTest1 springTest1 = applicationContext.getBean("springTest1",SpringTest1.class);
        springTest1.sayHello();
        System.out.println(springTest1.getName());
    }
}

结果毫无疑问打印出 Hello World!和ForMe,IOC把对象的生命周期由Spring来管理,直接从Spring那里去获取一个对象,而不用再new。

DI:Dependency Injection(依赖注入)
DI指 Spring 创建对象的过程中,将对象依赖属性(简单值,集合,对象)通过配置设值给该对象。
Spring动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了 Spring我们就只需要告诉Spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,Spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖 Connection才能正常运行,而这个Connection是由Spring注入到A中的,依赖注入的名字就这么来的。那么DI是如何实现的呢? Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,Spring就是通过反射来实现注入的。
简单来说什么是依赖注入,就是给属性赋值(包括基本数据类型和引用数据类型)

IOC与DI的区别:
IOC: 控制反转,将类的对象的创建交给Spring类管理创建.
DI: 依赖注入,将类里面的属性在创建类的过程中给属性赋值.
DI和IOC的关系: DI不能单独存在,DI需要在IOC的基础上来完成。
总的来说:通过Spring配置创建对象就是IOC,通过Spring配置进行设置属性就是DI。

其实上面的例子已经使用了setter方式依赖注入。当然除此之外还有构造器注入,配置文件中要改为 <constructor-arg name="name" value="张三"/>

最后一种常用的注入方式是使用注解
主要有四种注解可以注册bean,每种注解可以任意使用,只是语义上有所差异:

@Component:可以用于注册所有bean
@Repository:主要用于注册dao层的bean
@Controller:主要用于注册控制层的bean
@Service:主要用于注册服务层的bean

看一个简单的实例
Student类

@Component(value = "student")
public class Student {
    @Value("张三")
    private String name;
    @Value("123456")
    private String id;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", id='" + id + '\'' +
                '}';
    }
}

配置文件

<?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">
    <!-- 配置文件只需要扫描包的配置 -->
    <context:component-scan base-package="com" />
</beans>

测试类

public class Test {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Student student = applicationContext.getBean("student",Student.class);
        System.out.println(student.toString());
    }
}

在这里插入图片描述
使用注解方式省去了很多麻烦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
全新升级的Spring课程系列,2024年与您相伴成长!!!一、引言我们荣幸地宣布,将于2024年推出全新的Spring课程系列,旨在帮助初学者到进阶者一步步掌握Spring框架,并熟练应用于实际开发中。随着课程的进行,我们将逐步上传课件,为您提供丰富的学习资源,敬请持续关注。二、课程概览本课程是Spring全家桶课程的初识篇,课程将带您快速掌握Spring的核心知识点——AOP(面向切面编程)与IOC(控制反转),为您后续的学习打下坚实的基础。注意:该课程与【Spring框架解析】课程有所重叠,请不要重复购买哦!三、课程内容我们深知Spring Framework的核心原理对于学习和应用的重要性,因此本课程将聚焦于这些原理的实际应用。通过案例分析、项目实操等方式,让您在掌握核心知识点的同时,也能将其灵活应用于日常工作中。无论是面试准备还是项目开发,本课程都能为您提供有力的支持。四、Spring全家桶系列课程Spring全家桶生态圈汇聚了Spring框架及其众多相关组件、项目和模块,构成了一个强大的企业级Java应用程序开发、部署和管理解决方案。我们的Spring全家桶课程系列将涵盖这一生态圈的方方面面,从基础到进阶,让您全面掌握Spring的开发技巧和实践经验。本课程系列将聚焦于实操,让您通过实际操作加深对Spring框架的理解。如果您对Spring的原理等理论知识有浓厚兴趣,我们同时推荐您关注我们的【Spring框架解析】课程,以满足您更深入的学习需求。我们期待您的加入,共同在Spring的学习之路上成长和进步!Spring全家桶系列课程组成:

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值