一篇文章带你了解初始Spring

 更新时间:2021年8月3日 13:36  点击:1970

为什么要使用Spring

Why Spring?

Spring makes programming Java quicker, easier, and safer for everybody. Spring's focus on speed,

simplicity, and productivity has made it the world's most popular Java framework

Spring概述

Spring是一种轻量级的、开源的框架。

Spring为简化企业级开发而生,使用Spring开发可以将Bean对象,Dao组件对象,Service组件对象等交给Spring容器来管理,这样使得很多复杂的代码在Spring中开发却变得非常的优雅和简洁,有效的降低代码的耦合度,极大的方便项目的后期维护、升级和扩展。

Spring是一个IOC(DI)和AOP容器框架。

Spring的优良特性

非侵入式:基于Spring开发的应用中的对象可以不依赖于Spring的API

控制反转:IOC——Inversion of Control,指的是将对象的创建权交给Spring去创建。使用Spring之前,对象的创建都是由我们自己在代码中new创建。而使用Spring之后。对象的创建都是由给了Spring框架。

依赖注入:DI——Dependency Injection,是指依赖的对象不需要手动调用setXX方法去设置,而是通过配置赋值。

面向切面编程:Aspect Oriented Programming——AOP

容器:Spring是一个容器,因为它包含并且管理应用对象的生命周期

组件化:Spring实现了使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以使用XML和Java注解组合这些对象。

一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库(实际上Spring 自身也提供了表述层的SpringMVC和持久层的Spring JDBC)

IOC
IOC 是一种设计的思想,使用这种的设计的思想实现的框架就是IOC容器、通过这个容器可以实现对bean的管理、也就是对对象的生命周期的管理、也可以管理对象之间的依赖关系。IOC 是Spring用来实现对象的创建的、也就是将对象的创建交给Spring来实现的、降低了类和类之间的耦合度。
IOC 的 思想依赖于IOC容器的来实现的,IOC的底层就是对象工厂。
Spring提供了两种实现IOC的方法、一种是BeanFactroy来实现的、一种是ApplicationContext来是实现的。
IOC的底层原理:IOC的底层就是使用xml、工厂模式、反射的技术来实现。

DI
实现了IoC思想的容器就是IoC容器,比如:SpringFremework, Guice(Google开源的轻量级DI框架)

AOP
AOP(Aspect-Oriented Programming,面向切面编程)是对传统传统 OOP(Object-Oriented Programming,面向对象编程)的补充,属于一种横向扩展。其将与核心业务无关的代码,如日志记录、性能监控、事务处理等从业务逻辑代码中抽离出来,进行横向排列,从而实现低耦合,提高开发效率。

Spring容器使用流程

1.启动容器

加载类路径下的beans.xml 文件

在这里插入图片描述

2.完成bean的初始化

通过配置文件完成对bean的初始化

在这里插入图片描述

扫描路径下org.example添加四个注解的类

在这里插入图片描述

3.注册bean到容器中

在这里插入图片描述

在这里插入图片描述

4.装配bean的属性

在这里插入图片描述

bean的注册

四个注解都可以用来将当前的类注入到bean中去、将类交给spring来托管。
@Component是基础注解,表示一个 JavaBean 可以被注入到 Spring 容器中。
为了更好的表示 Web 服务中的三层结构,所以就额外的引出了另外的三种注解分别用在三层结构中进行标注:
@Controller 用在表现层,对来自前端的请求进行转发处理与重定向。
@Repository 用在持久层,标注 DAO 类,表示这个类可以对数据库进行数据的读取或者写入。
@Service 用在业务层,用来处理业务逻辑。
引入后三个注解之后,就实现了将处理前端请求、处理业务逻辑、处理数据库读写这三个基本任务进行了解耦,方便程序的编写和项目维护。
也可以使用@Bean注解
当前类被 Spring 扫描到时,可以在方法上使用 @Bean 注解,通过方法返回类型,也可以定义、注册Bean对象,默认使用方法名作为Bean的名称。
@Configuration
在类被Spring扫描到时,使用 @Configuration 注解,可以注册一个配置类到容器中。配置类一般用来
可以使用FactoryBean接口:先定义一个Bean,实现FactoryBean接口,指定泛型为要注册的类,通过getObject方法的返回

bean属性注入

可以在属性上使用 @Autowired 注解
也可以使用setter方法上使用 @Autowired 注解
也能使用构造方法注入
使用 @Qualifier(“名称”) 注解、注入指定的bean

@Controller
public class LoginController {
    //    第一种注解的方式属性注入
    //     @Autowired
    @Resource
    private LoginService loginService;

    //第二种的注入的方式使用set方法来实现注入
    public void setLoginService(LoginService loginService) {
        this.loginService = loginService;
    }
    //第三中的方法、使用构造函数来实现注入、使用构造函数的方式来实现注入的话、不需要@Autowire注解
    public LoginController(LoginService loginService) {
        this.loginService = loginService;
    }
    public void say() {
        loginService.say();
    }
    @Bean
    public User user1() {
        User user = new User();
        user.setName("ni");
        ;
        user.setPassword("wo");
        return user;
    }
    @Bean
    public User user2() {
        User user = new User();
        user.setName("y");
        user.setPassword("y");
        return user;
    }
}

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注猪先飞的更多内容!

[!--infotagslink--]

相关文章

  • Spring AOP 对象内部方法间的嵌套调用方式

    这篇文章主要介绍了Spring AOP 对象内部方法间的嵌套调用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-08-29
  • Spring Cloud 中@FeignClient注解中的contextId属性详解

    这篇文章主要介绍了Spring Cloud 中@FeignClient注解中的contextId属性详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-25
  • Springboot如何实现Web系统License授权认证

    这篇文章主要介绍了Springboot如何实现Web系统License授权认证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-28
  • 如何在Spring WebFlux的任何地方获取Request对象

    这篇文章主要介绍了如何在Spring WebFlux的任何地方获取Request对象,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下...2021-01-26
  • 详解SpringCloudGateway内存泄漏问题

    这篇文章主要介绍了详解SpringCloudGateway内存泄漏问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-16
  • Spring为什么不推荐使用@Autowired注解详析

    @Autowired 注解的主要功能就是完成自动注入,使用也非常简单,但这篇文章主要给大家介绍了关于Spring为什么不推荐使用@Autowired注解的相关资料,需要的朋友可以参考下...2021-11-03
  • Springboot如何使用mybatis实现拦截SQL分页

    这篇文章主要介绍了Springboot使用mybatis实现拦截SQL分页,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-19
  • SpringMVC文件上传原理及实现过程解析

    这篇文章主要介绍了SpringMVC文件上传原理及实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-15
  • Spring Data JPA 关键字Exists的用法说明

    这篇文章主要介绍了Spring Data JPA 关键字Exists的用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-10
  • Vue 重置data的数据为初始状态操作

    这篇文章主要介绍了Vue 重置data的数据为初始状态操作方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
  • tomcat启动完成执行 某个方法 定时任务(Spring)操作

    这篇文章主要介绍了tomcat启动完成执行 某个方法 定时任务(Spring)操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-25
  • 使用Maven 搭建 Spring MVC 本地部署Tomcat的详细教程

    这篇文章主要介绍了使用Maven 搭建 Spring MVC 本地部署Tomcat,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-08-16
  • Java Spring Cloud 负载均衡详解

    这篇文章主要介绍了Spring Cloud负载均衡及远程调用实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2021-09-18
  • SpringMvc自动装箱及GET请求参数原理解析

    这篇文章主要介绍了SpringMvc自动装箱及GET请求参数原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-19
  • SpringMvc获取请求头请求体消息过程解析

    这篇文章主要介绍了SpringMvc获取请求头请求体消息过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-17
  • Springboot使用thymeleaf动态模板实现刷新

    这篇文章主要介绍了Springboot使用thymeleaf动态模板实现刷新,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-08-31
  • Idea打包springboot项目没有.original文件解决方案

    这篇文章主要介绍了Idea打包springboot项目没有.original文件解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-26
  • spring boot 使用utf8mb4的操作

    这篇文章主要介绍了spring boot 使用utf8mb4的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-20
  • Springmvc ResponseBody响应json数据实现过程

    这篇文章主要介绍了Springmvc ResponseBody响应json数据实现过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-26
  • SpringData Repository接口用法解析

    这篇文章主要介绍了SpringData Repository接口用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-08-27