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. 学习Django【1】模型

    编辑 models.py 文件,改变模型. 运行 python manage.py makemigrations 为模型的改变生成迁移文件. 运行 python manage.py migrate 来 ...

  2. 学习unigui【19】unidbgrid的Group By This Field汉化

    上面已经将group by this field 汉化. 由于版本的不断更新,不可避免有汉化遗漏.那么说到 如何汉化问题. 根据ExtJSVersion查找你电脑响应目录文件D:\Program Fi ...

  3. exe4j工具使用-jar包转exe可执行文件

    exe4j介绍 exe4j可以将java打包的jar包转为exe可执行文件,实现在没有jdk环境下运行jar包. 下载链接 https://pan.baidu.com/s/1sfEJyxPABmhsl ...

  4. Quill自定义工具栏

    <div id="toolbar"> <button class="ql-bold"></button> <butto ...

  5. uniapp阻止Modal模态框关闭

    要阻止uniapp的Modal模态框关闭,没有找到相关api,但可以通过保存配置立即打开的方式变相实现阻止关闭: const option = { title: "输入礼品券名称" ...

  6. 话说神奇的content="IE=edge,chrome=1"的meta标签内容

    这是个是IE8的专用标记,用来指定IE8浏览器去模拟某个特定版本的IE浏览器的渲染方式(比如人见人烦的IE6),以此来解决部分兼容问题,例如模拟IE7的具体方式如下: < meta http-e ...

  7. git 更新和强制更新失败

    Your local changes to the following files would be overwritten by mergeerror: Your local changes to ...

  8. 精选 14 款 .NET 开源、功能强大的快速开发框架,提高开发生产效率、避免工作996!

    前言 最近发现DotNetGuide技术社区微信交流群有不少小伙伴在问:.NET有哪些不错的快速开发框架推荐的? 选择一款全面且功能强大的快速开发框架能够帮助我们解决C#..NET项目中的很多重复工作 ...

  9. [语法分析/编译原理] Antlr : 开源语法分析工具

    序 最近的工作涉及到数据引擎查询 DSL 设计,正好找到 Antlr. 那些繁琐的词法分析.语法分析工作全部由 Antlr 搞定,即使你不懂编译原理,也不能阻碍你使用 Antlr 开发自己的小语言. ...

  10. 改进NeteaseCloudMusicGtk4:添加移除歌曲按钮

    之前已经发了一篇博客简述了如何阅读这个项目,尽管这个项目已经开源很久了,但我找了很久都没有找到怎么从播放列表移除歌曲,那就自己动手实现,再提个 PR 吧. 运行起来应用后通过 Inspector(Ct ...