Spring概述

  • Spring框架是一个轻量级的企业级开发的一站式解决方案
  • Spring框架主要提供Ioc容器、AOP、数据访问、WEB开发、消息、测试等相关技术的支持
  • 每一个被Spring管理的Java对象都称之为Bean

Spring的模块

核心容器(core container)

  • Spring-Core:核心工具类,Spring其他模块大量使用Spring-Core
  • Spring-Beans:Spring定义Bean的支持
  • Spring-Context:运行时Spring容器
  • Spring-Context-Support:Spring容器对第三方包的支持
  • Spring-Expression:使用表达式语言在运行时查询和操作对象

AOP

  • Spring-AOP:基于代理的AOP支持
  • Spring-Aspects:基于AspectJ的AOP支持

消息(Messaging)

  • Spring-Messaging:对消息架构和协议的支持

Web

  • Spring-Web:提供基础的Web集成功能,在Web项目中提供Spring的容器
  • Spring-Webmvc:提供基于Servlet的Spring MVC
  • Spring-WebSocket:提供WebSocket功能
  • Spring-Webmvc-Portlet:提供Portlet环境支持

数据访问/集成(Data Access/Integration)

  • Spring-JDBC:提供以JDBC访问数据库的支持
  • Spring-TX:提供编程式和声明式的事务支持
  • Spring-ORM:提供对对象/关系映射技术的支持
  • Spring-OXM:提供对对象/xml映射技术的支持
  • Spring-JMS:提供对JMS的支持

Spring 的生态

Spring Boot
| 使用默认开发配置来实现快速开发
Spring XD
| 用来简化大数据应用开发
Spring Cloud
| 为分布式系统开发提供工具集
Spring Data
| 对主流的关系型和NoSQL数据库的支持
Spring Integration
| 通过消息机制对企业集成模式(EIP)的支持
Spring Batch
| 简化及优化大量数据的批处理操作
Spring Security
| 通过认证和授权保护应用
Spring HATEOAS
| 基于HATEOAS原则简化REST服务开发
Spring Social
| 与社交网络API(如Facebook、新浪微博等)的集成
Spring AMQP
| 对基于AMQP的消息支持
Spring Mobile
| 提供对手机设备检测的功能,给不同的设备返回不同的页面的支持
Spring for Android
| 主要提供在Android上消费RESTful API的功能
Spring Web Flow
| 基于Spring MVC提供基于向导流程式的Web应用开发
Spring LDAP
| 简化使用LDAP开发
Spring Session
| 提供一个API及实现来管理用户会话信息

Spring 基础配置

Spring 框架四大原则

  1. 使用POJO进行轻量级和最小侵入式开发。
  2. 通过依赖注入和基于接口编程实现松耦合。
  3. 通过AOP和默认习惯进行声明式编程
  4. 使用AOP和模板(template)减少模块化代码。

依赖注入

  • 依赖注入(DI)和控制反转(IoC)在Spring环境下是等同的概念。
  • 控制反转是通过依赖注入实现的。
  • 依赖注入指的是容器负责创建对象和维护对象间的依赖关系,而不是通过对象本身负责自己的创建和解决自己的依赖。
  • 依赖注入的目的是为了解耦,体现‘组合’的理念。(如果要一个类实现某个功能,可以继承具有此功能的父类,也可以组合另外一个有此功能的类。子类继承父类耦合度高,所以采用‘组合’其他类的方式来降低耦合)。
  • Spring IoC容器负责创建Bean、注入Bean。Spring提供xml、注解、Java配置、groovy配置的方式实现Bean的创建和注入。

声明Bean的注解

  • @Component mei有明确的角色

  • @Service 在业务逻辑层(Service层)使用

      package ch1.di;
    import org.springframework.stereotype.Service; @Service //使用@Service注解声明当前FunctionService类是Spring管理的一个bean
    public class FunctionService {
    public String sayHello(String word){
    return "Hello "+word+" !";
    }
    }
  • @Repository 在数据访问层(dao层)使用

  • @Controller 在展现层(MVC->Spring MVC)使用

这4个注解是等效的,可根据需要选用。

注入Bean的注解

  • @Autowired: Spring 提供的注解

      package ch1.di;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service; @Service
    public class UseFunctionService {
    @Autowired // 使用@Autowired将FunctionService的实体Bean注入到UseFunctionService中,让UseFunctionService具备FunctionService的功能
    FunctionService functionService; public String Sayhello(String word){
    return functionService.sayHello(word);
    }
    }
  • @Inject: JSR-330提供的注解

  • @Resource: JSR-250提供的注解

@Autowired、@Inject、@Resource可注解在set方法或者属性上。

配置类
package ch1.di;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; @Configuration // 声明当前是一个配置类
@ComponentScan("ch1.di") // 使用@ComponentScan自动扫描包名下所有使用@Component、@Service、@Repository、@Controller的类,并注册为Bean
public class DiConfig {
}
运行
package ch1.di;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Main {
public static void main(String[] args){
// 使用AnnotationConfigApplicationContext作为Spring容器,接受输入一个配置类作为参数
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(DiConfig.class);
// 获得声明配置的UseFunctionService的Bean
UseFunctionService useFunctionService = context.getBean(UseFunctionService.class);
System.out.println(useFunctionService.Sayhello("helloword"));
context.close();
}
}

Spring 概述和依赖注入(DI)的更多相关文章

  1. Spring(2):依赖注入DI

    依赖注入DI 当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在 传统的程序设计过程中,通常由调用者来创建被调用者的实例.但在Spring里,创建被 ...

  2. 【Spring IoC】依赖注入DI(四)

    平常的Java开发中,程序员在某个类中需要依赖其它类的方法.通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. Spring提出了依赖注入的思想,即依赖类不由程 ...

  3. spring学习之依赖注入DI与控制反转IOC

    一 Ioc基础 1.什么是Ioc? Ioc(Inversion of Control)既控制反转,Ioc不是一种技术,而是一种思想,在Java开发中意味着将设计好的对象交给容器来进行控制,并不是像传统 ...

  4. spring中的依赖注入(DI)笔记

    使用xml bean依赖注入有set注入和构造器注入 set注入用的比较多 <bean id="a" class="com.A"> <prop ...

  5. spring(3)------控制反转(IOC)/依赖注入(DI)

    一.spring核心概念理解 控制反转: 控制反转即IoC (Inversion of Control).它把传统上由程序代码直接操控的对象的调用权交给容器.通过容器来实现对象组件的装配和管理. 所谓 ...

  6. Spring框架学习笔记(1)——控制反转IOC与依赖注入DI

    Spring框架的主要作用,就是提供了一个容器,使用该容器就可以创建并管理对象.比如说Dao类等,又或者是具有多依赖关系的类(Student类中包含有Teacher类的成员变量) Spring有两个核 ...

  7. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework的依赖注入和控制反转

    Dependency Injection and Inversion of Control 1.概述: 1.1相关概念 bean:由IoC容器所管理的对象,也即各个类实例化所得对象都叫做bean 控制 ...

  8. [Android]使用Dagger 2依赖注入 - DI介绍(翻译)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5092083.html 使用Dagger 2依赖注入 - DI介 ...

  9. 浅析“依赖注入(DI)/控制反转(IOC)”的实现思路

    开始学习Spring的时候,对依赖注入(DI)——也叫控制反转(IOC)—— 的理解不是很深刻.随着学习的深入,也逐渐有了自己的认识,在此记录,也希望能帮助其他入门同学更深入地理解Spring.本文不 ...

  10. Atitit js中的依赖注入di ioc的实现

    Atitit js中的依赖注入di ioc的实现 全类名(FQCN)为标识符1 混合请求模式1 使用类内  builder  即可..2 Service locator method走ok拦2 Jav ...

随机推荐

  1. System V信号量 vs. POSIX信号量:核心区别与选型指南

    System V信号量 vs. POSIX信号量:核心区别与选型指南 最近在学习linux系统编程的章节,接触到了两种信号量,所以专门研究了二者的区别,将二者的对比记录于此. 在Linux多线程/进程 ...

  2. emmy断点调试

    package.cpath = package.cpath .. ';C:/Users/Administrator/AppData/Roaming/JetBrains/IntelliJIdea2021 ...

  3. vue 水印插件

    vue 水印插件 插件: directives.js import Vue from 'vue' /** * author: zuokun * 水印 * text:水印文字 * font:字体 * t ...

  4. Golang服务可观测和思路分享

    省流 中医四诊"望闻问切"与程序诊断有异曲同工之妙.在Golang问题排查中,我们需要建立系统化的诊断思维:通过观察表象(望).收集信息(闻).追溯根源(问).精准施治(切)四个维 ...

  5. CTF实验吧:登陆一下? 不一样的SQL注入

    http://ctf5.shiyanbar.com/web/wonderkun/web/index.html 发现 过滤了很多SQL敏感字符,并且 转码绕过也并不行 发现'和=没有进行过滤 考虑万能密 ...

  6. 36.7K star!拖拽构建AI流程,这个开源LLM应用框架绝了!

    36.7K star!拖拽构建AI流程,这个开源LLM应用框架绝了! 只需拖拽节点,5分钟搭建专属AI工作流! Flowise 是一款革命性的低代码LLM应用构建工具,开发者通过可视化拖拽界面,就能快 ...

  7. 代码随想录第二十五天 | Leecode 491. 非递减子序列、46. 全排列、47. 全排列 II

    Leecode 491. 非递减子序列 题目描述 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 .你可以按 任意顺序 返回答案. 数组中可能含有重 ...

  8. K8s新手系列之Secret资源

    概述 官方文档:https://kubernetes.io/zh-cn/docs/concepts/configuration/secret/ 在Kubernetes(k8s)中,Secret是一种用 ...

  9. SQL 强化练习 (十)

    这一周都被客户搞得很惨.... 项目主流程不推进, 尽搞一些无关紧要的事情, 什么界面 ui 美化, 增加什么按钮进度条, 模糊查询...各种乱七八糟的需求, 挡都挡不住呀... 真的是把我当全栈使了 ...

  10. M系Mac原生运行《原神》保姆级教程!手把手教你零门槛畅玩手游!

    Apple Silicon芯片的进化正在重塑M系列Mac的跨平台能力.通过开源工具PlayCover,开发者社区成功突破系统限制,让<原神 >等热门手游在M1/M2/M3/M4芯片设备上流 ...