Spring(详细介绍)

目录

一、简介

1、什么是Spring?

 2、Spring框架的核心特性

3、优点

二、IOC容器

介绍

 1、获取资源的传统方式

2、控制反转方式获取资源 

3、DI 

4、IOC容器在Spring中的实现

 入门案例

1、创建Maven Module

2、引入依赖

 3、创建HelloWorld类

 4、在Spring的配置文件中配置bean

5、创建测试类测试 

6、思路

7、注意 

三、基于注解管理Bean

3.1、Bean对象定义及获取

3.2、Bean对象定义 

3.3、Bean对象获取

3.4、应用分析 

3.5、依赖注入

3.5.1、 @Value注解

3.5.2、@Autowired注解 


一、简介

下载地址:

Spring | ProjectsLevel up your Java code and explore what Spring can do for you.icon-default.png?t=N7T8https://spring.io/projects

1、什么是Spring?

        Spring是一个开源的Java开发框架,它简化了Java应用程序的开发过程,提供了一套全面的、一致性的编程模型,使得开发者可以更轻松地构建可扩展、可维护的企业级应用程序。

 2、Spring框架的核心特性

  1. 控制反转(IoC):Spring通过IoC容器管理对象之间的依赖关系,简化了对象之间的耦合。
  2. 面向切面编程(AOP):Spring的AOP支持允许开发者在程序运行过程中动态地添加功能(例如事务管理、日志记录等)。
  3. 数据访问:Spring提供了对多种数据访问技术的支持,如JDBC、ORM框架、NoSQL等。
  4. 事务管理:Spring提供了一致的事务管理抽象,使得开发者可以在不同的事务管理实现之间切换。
  5. MVC框架:Spring的MVC框架使得开发者可以轻松地构建Web应用程序。
  6. 安全性:Spring提供了对身份认证和授权的支持,帮助开发者构建安全的应用程序。

3、优点

  1. 轻量级:Spring框架核心库非常轻量,通过模块化的设计,开发者可以选择所需的模块,避免了不必要的依赖。

  2. 松耦合:Spring框架采用依赖注入(DI)和面向接口编程的方式,使得应用程序各个组件之间的耦合度降低,易于维护和测试。

  3. 面向切面编程:Spring框架支持面向切面编程(AOP),可以解耦横切关注点(如事务管理、日志记录等),提高代码的复用性和可维护性。

  4. 容器管理:Spring框架提供了一个容器(IoC容器),可以统一管理应用程序中的对象,通过配置文件或注解方式管理对象的创建和销毁。

  5. 事务管理:Spring框架提供了强大的事务管理支持,可以通过声明式事务的方式简化事务管理的代码,减少样板代码的编写。

  6. 灵活性:Spring框架提供了丰富的扩展机制,可以与其他框架(如Hibernate、MyBatis等)无缝集成,也支持多种数据库连接池、日志等第三方组件的集成。

  7. 测试支持:Spring框架提供了对单元测试和集成测试的强大支持,可以方便地测试代码的正确性和性能。

  8. 社区活跃:Spring框架是一个开源项目,拥有庞大的社区支持和活跃的开发者社群,可以获得丰富的文档、教程和解决方案。

        总的来说,Spring框架是一款功能强大、灵活性高、易于扩展和维护的Java开发框架,适用于各种规模和类型的应用程序开发。

二、IOC容器

介绍

IOC:控制反转(Inversion of Control)

 1、获取资源的传统方式

        在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的资源,在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式,增加了学习成本,同时降低了开发效率。

2、控制反转方式获取资源 

        反转控制的思想完全颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方向——改由容器主动的将资源推送给需要的组件,开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源的方式即可,极大的降低了学习成本,提高了开发的效率。这种行为也称为查找的被动形式。 

3、DI 

DI:Dependency Injection,翻译过来是依赖注入。

        DI 是 IOC 的另一种表述方式:即组件以一些预先定义好的方式(例如:setter 方法)接受来自于容器的资源注入。相对于IOC而言,这种表述更直接。

        IOC 就是一种反转控制的思想, 而 DI 是对 IOC 的一种具体实现。

4、IOC容器在Spring中的实现

        Spring 的 IOC 容器就是 IOC 思想的一个落地的产品实现。IOC 容器中管理的组件也叫做 bean。在创建bean 之前,首先需要创建 IOC 容器。Spring 提供了 IOC 容器的两种实现方式:

        1、BeanFactory

                这是IOC容器的基本实现,是Spring内部使用的接口。面向Spring本身,不提供给开发人员使用。

        2、ApplicationContext

                BeanFactory的子接口,提供了更多高级特性。面向Spring的使用者,几乎所有场合都使用ApplicationContext而不是底层的Bean Factory。

 入门案例

1、创建Maven Module
2、引入依赖
<dependencies>
    <!-- 基于Maven依赖传递性,导入spring-context依赖即可导入当前所需所有jar包 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.1</version>
    </dependency>
    <!-- junit测试 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>
 3、创建HelloWorld类
public class HelloWorld {
    public void sayHello(){
        System.out.println("helloworld");
    }
}

 4、在Spring的配置文件中配置bean
<bean id="helloworld" class="com.atguigu.spring.bean.HelloWorld"></bean>
5、创建测试类测试 
@Test
public void testHelloWorld(){
    ApplicationContext ac = newClassPathXmlApplicationContext("applicationContext.xml");
    HelloWorld helloworld = (HelloWorld) ac.getBean("helloworld");
    helloworld.sayHello();
}
6、思路

7、注意 

Spring 底层默认通过反射技术调用组件类的无参构造器来创建组件对象,这一点需要注意。

三、基于注解管理Bean

3.1、Bean对象定义及获取

        在Spring框架规范中,所有由spring管理的对象都称之为Bean对象

3.2、Bean对象定义 

        Spring提供了以下多个注解,这些注解可以直接标注在java类上,将它们定义成Spring Bean。

注解说明
@Component该注解用于描述Spring中的Bean,它是一个泛化的概念,仅仅标识容器中的一 个组件(Bean),并且可以作用在任何层次,例如Service层、Dao层等,使用时只需将该注解标注在相应的类上即可。
@Respository该注解用于数据访问层(Dao层)的类标识为Spring中的Bean,功能与 @Component相同。
@Service该注解通常作用在业务层(Service层),用于将业务层的类标识为Spring中的 Bean,其功能与@Component相同。
@Controller该注解通常作用在控制层(如SpringMVC的Controller),用于将控制层的类标 识为Spring中的Bean,其功能与@Component相同。

3.3、Bean对象获取

        通过ApplicationContext对象获取:调用ApplicationContext对象的getBean()方法,传入对应类的类型 即可获取该Bean对象,示例:

ApplicationContext context = new AnnotationConfigApplicationContext("包扫描路径");
User user = context.getBean(类名.class);

3.4、应用分析 

在 cn.spring 下创建子包 bean ,进行 bean 对象的创建及获取、

第1步:在bean包下创建类:UserDao

@Repository
public class UserDao {
    private String databaseUrl;
    private String username;
    private String password;
}

 第2步:在bean包下创建测试类:UserDaoTest

public class TestUserDao {
    @Test
    public void testBean(){
        ApplicationContext context = new
AnnotationConfigApplicationContext("cn.spring.bean");
        UserDao userDao = context.getBean(UserDao.class);
        System.out.println("userDao = " + userDao);
    }
}

说明:将java类中的 @Repository注解 替换为 @Component注解、@Service注解、@Controller注 解 都是可以的。

3.5、依赖注入

3.5.1、 @Value注解

        @Value注入是将属性值直接注入到bean中,主要用于注入一些简单类型的属性(如字符串、基本类型 等); 使用时需要注意属性的类型和格式,否则会导致注入失败。

示例:在UserDao中进行属性值注入

第1步:在UserDao的属性中通过@Value注解注入属性值

@Repository
public class UserDao {
    @Value("jdbc:mysql://localhost:3306/")
    private String databaseUrl;
    @Value("root")
    private String username;
    @Value("root")
    private String password;
 
@Override
public String toString() {
    return "UserDao{" +
        "databaseUrl='" + databaseUrl + '\'' +
        ", username='" + username + '\'' +
        ", password='" + password + '\'' +
        '}';
    }
}

第2步:执行测试方法进行测试

3.5.2、@Autowired注解 

        @Autowired注入是将对象注入到bean中,并且在注入对象时会根据依赖注入容器中bean的类型进行匹 配。如果容器中有多个类型匹配的bean存在,则会抛出异常。因此,@Autowired注入常用于注入复杂 对象、接口类型的属性或其他bean实例。

3.5.2.1、 根据类型注入 

定义UserService类,并注入UserDao对象

第1步:在包bean下创建 UserService 类

@Service
public class UserService {
    @Value("注册业务")
    private String sname;
    // Autowired自动装配
    @Autowired
    private UserDao userDao;
 
    @Override
    public String toString() {
        return "UserService{" +
            "sname='" + sname + '\'' +
            ", userDao=" + userDao +
            '}';
    }
}

第2步:调整测试方法

@Test
public void testAuto(){
    ApplicationContext context = new
AnnotationConfigApplicationContext("cn.spring.bean");
    UserService userService = context.getBean(UserService.class);
    System.out.println("userService = " + userService);
}

第3步:执行测试方法测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/494322.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

EdgeGallery开发指南

API接口 简介 EdgeGallery支持第三方业务系统通过北向接口网关调用EdgeGallery的业务接口。调用流程如下图所示&#xff08;融合前端edgegallery-fe包含融合前端界面以及北向接口网关功能&#xff0c;通过浏览器访问时打开的是融合前端的界面&#xff0c;通过IP:Port/urlPref…

Overcooked!(并查集区间元素合并优化)

本题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网登录—专业IT笔试面试备考平台_牛客网登录—专业IT笔试面试备考平台_牛客网 题目&#xff1a; 样例&#xff1a; 输入 5 5 1 1 2 3 1 2 2 2 4 3 1 4 3 2 5 输出 YES YES NO 思路&#xff1a; 根据题意&#xff0c;这…

KubeSphere简单介绍及安装使用

KubeSphere 概述 官网地址&#xff1a;https://kubesphere.io/zh/ 什么是 kubesphere KubeSphere 是一个开源的多云容器管理平台&#xff0c;旨在简化企业级 k8s 集群的部署、管理和运维。它提供了一个可视化的管理界面&#xff0c;帮助用户更轻松地管理和监控 k8s 集群&…

『Apisix进阶篇』动态负载均衡:APISIX的实战演练与策略应用

&#x1f680;『Apisix系列文章』探索新一代微服务体系下的API管理新范式与最佳实践 【点击此跳转】 &#x1f4e3;读完这篇文章里你能收获到 &#x1f3af; 掌握APISIX中多种负载均衡策略的原理及其适用场景。&#x1f4c8; 学习如何通过APISIX的Admin API和Dashboard进行负…

设计模式——行为型——策略模式Strategy

Q&#xff1a;策略模式的特点 A&#xff1a; 具体算法从具体的业务方法中独立出来策略模式是同行为的不同实现 Q&#xff1a;什么时候使用策略模式 A&#xff1a;多个if-else使用策略模式 收费对象类 public class CashContext {private CashStrategy cashStrategy;public…

备考ICA----Istio实验10---为单个主机配置TLS Istio Ingress Gateway实验

备考ICA----Istio实验10—为单个主机配置 TLS Istio Ingress Gateway实验 1. 环境准备 部署httpbin kubectl apply -f istio/samples/httpbin/httpbin.yaml 2. 证书生成 2.1 生成根证书 生成根证书keyfile和crt文件 mkdir example_certs_root openssl req -x509 -sha256 …

Code Review 最佳实践

成功的同行评审策略要求严格记录的流程与非威胁性、协作性环境之间保持平衡。高度规范的同行评审可能会抑制生产力&#xff0c;然而&#xff0c;过于随意的流程往往效果不佳。经理们需要找到一种折中方案&#xff0c;使同行评审既高效又有效&#xff0c;同时促进团队成员之间的…

特斯拉铺路 小米SU7稳了

文 | AUTO芯球 作者 | 李逵 我把特斯拉的销售拉黑了 拉完又后悔了 因为我欠他一个人情啊 具体怎么回事 看完你就会明白了 今天一大早 特斯拉的销售就发信息给我 说从4月1号开始 特斯拉就要涨价了 我以前去看的Model Y 要提价5000块 而且之前的补贴 什么保险补贴、…

Tunes不能读取iPhone的内容,请前往iPhone偏好设置的摘要选项卡,然后单击恢复以将此iPhone恢复为出厂设置

重启itunes: 参考链接&#xff1a; https://baijiahao.baidu.com/s?id1642568736254330322&wfrspider&forpc 人工智能学习网站&#xff1a; https://chat.xutongbao.top

「媒体宣传」媒体邀约几种常见方法!-51媒体

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体邀约的常见方法确实包括电话邀约、邮件邀约、社交媒体邀约以及通过媒体公关公司代邀约等。 电话邀约&#xff1a;这是一种直接且高效的方式&#xff0c;可以通过电话与媒体记者沟通&…

FANUC机器人KAREL语言程序结构(入门)

一、karel语言程序结构 FANUC机器人keral语言编程结构如下图所示&#xff1a; Keral指令对应的基础用法如下所示&#xff1a; 二、创建一个简单的写屏程序 依照对应的karel语法写写入下列程序 运行对应的程序进行测试&#xff1a;

强化安全防护:升级桌面网管软件提升医院信息系统安全

在当今信息化发展的时代&#xff0c;医院作为重要的医疗服务机构&#xff0c;对终端设备的管理尤为重要。然而&#xff0c;随着国家对医院终端管理的要求日益提高&#xff0c;传统的桌面网管软件已经难以满足现代医院的需求。针对这一现状&#xff0c;升级桌面网管软件已成为当…

JVM(五)——类加载阶段

一、类加载阶段 一个类型从被加载到虚拟机内存中开始&#xff0c;到卸载出内存为止&#xff0c;它的整个生命周期将会经历加载 &#xff08;Loading&#xff09;、验证&#xff08;Verification&#xff09;、准备&#xff08;Preparation&#xff09;、解析&#xff08;Resol…

HCIA-Datacom实验_03_实验一:华为VRP系统基本操作

1.运行eNSP&#xff0c;设置-界面设置-自定义界面-设备标签&#xff0c;“总显示接口标签” 打钩。 2.按照实验拓扑添加设备 注&#xff1a;如果是真实环境&#xff0c;需要接两条线&#xff1a; &#xff08;1&#xff09;串口线&#xff1a;电脑USB口到网络设备Console口&am…

第二篇:3.1 广告印象(AD Impression) - IAB与MRC及《增强现实广告效果测量指南1.0》

--- 我为什么要翻译美国IAB科技公司系列标准 翻译计划 第一篇概述—IAB与MRC及《增强现实广告效果测量指南》之目录、适用范围及术语第二篇广告效果测量定义和其他矩阵之- 3.1 广告印象&#xff08;AD Impression&#xff09;第三篇广告效果测量定义和其他矩阵之- 3.2 可见度 …

网络安全-提权篇

我们在文件包含的时候可以将错误的用户名包含进日志&#xff0c;但是权限问题让人很烦恼&#xff0c;今天的侧重点主要是跟大家聊一聊提权 用户名包含进日志参考&#xff1a;RCE with LFI and SSH Log Poisoning - Hacking Articles 目录 一、环境 二、看看权限&#xff08;…

17、GateWay和Sentinel继承实现服务限流

注&#xff1a;本篇文章主要参考周阳老师讲解的cloud进行整理的&#xff01; 1、需求说明 cloudalibaba-sentinel-gateway9528 保护 cloudalibaba-provider-payment9001 2、启动nacos服务器8848 startup.cmd -m standalone 3、启动sentinel服务器8080 java -jar sentinel-dash…

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

基于java实现学科竞赛管理系统【Springbootmybatislayui】 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文…

深入Facebook的世界:探索数字化社交的无限可能性

引言 随着数字化时代的到来&#xff0c;社交媒体平台已经成为了人们日常生活中不可或缺的一部分&#xff0c;而其中最为突出的代表之一便是Facebook。作为全球最大的社交媒体平台之一&#xff0c;Facebook不仅仅是一个社交网络&#xff0c;更是一个数字化社交的生态系统&#…

2024年云计算使用报告,89%组织用多云,25%广泛使用生成式AI,45%需要跨云数据集成,节省成本是云首要因素

备注&#xff1a;本文来自Flexera2024年的云现状调研报告的翻译。原报告地址&#xff1a; https://info.flexera.com/CM-REPORT-State-of-the-Cloud Flexera是一家专注于做SaaS的IT解决方案公司&#xff0c;有30年发展历史&#xff0c;5万名客户&#xff0c;1300名员工。Flex…