Spring 入门

Spring 全家桶

  • Spring Framework —— Spring 框架 , 基石
  • Spring Boot —— 构建项目
  • Spring Cloud —— 微服务
  • Spring Cloud Data Flow —— 数据集成

官网

本项目只用 Spring Framework 和 Spring Boot

Spring Core : Spring IoC

依赖注入, 实现的 IoC Container, 依赖注入的关键, 本质上是一个工厂。(我想到了 依赖倒置原则。)

Spring 容器 管理 Bean 的装配手段 (获取 Bean)

// Spring 容器 装配 Bean 的 基本方式
//定义 接口 Alpha 和 实现类 AlphaDaoHibernateImpl 、 AlphaDaoMyBatisImpl
/**
* 注解说明:
* @Repository —— 该 类是 数据库 相关 @Repository("Bean_name") —— 指定该 Bean 的名字
* @Primary —— 若一个 interface 有多个 implements class, 被该注解声明的类(Bean) 将被 Spring 容器 优先装配
*/
public interface AlphaDao {String select();
}@Repository("alphaHibernate") // 自定义这个 bean 的名字 为 alphaHibernate, 通过 getBean 指定 name 字段 获取 特定的 接口实现类
public class AlphaDaoHibernateImpl implements AlphaDao {@Overridepublic String select() {return "J+Hibernate";}
}@Repository
@Primary // 该实现类 优先装配
public class AlphaDaoMyBatisImpl implements AlphaDao {@Overridepublic String select() {return "MybatisImpl";}
}// Test 测试类 ... 省略类 定义, 直接给出 测试方法
/**
* 方法说明: getBean()
* applicationContext.getBean(xxx.class); —— 装配 xxx (或其主实现类)
* applicationContext.getBean( "alphaHibernate", AlphaDao.class); —— 装配 xxx 的实现类,Bean 名为 alphaHibernate
*/
// applicationContext 是 Spring 容器的实例化对象
@Test
public void testApplicationContext() {System.out.println(applicationContext);AlphaDao alphaDao = applicationContext.getBean(AlphaDao.class);System.out.println(alphaDao.select());// alphaDao = applicationContext.getBean( name: "alphaHibernate", AlphaDao.class); // 视频里是这样写的, 但我下面这样也成功alphaDao = applicationContext.getBean( "alphaHibernate", AlphaDao.class);System.out.println(alphaDao.select());}

Spring 容器 管理 自定义 Bean 的构造和销毁

被 Spring 容器 管理的 Bean 默认是 单例的 @Scope("Singloten")

修改其单例属性只需要在 class 定义前加 @Scope("prototype") 注解

// 自定义 Bean  —— AlphaService
/**
* 注解说明 —— 类:
* @Service —— 该类是 业务组件
* @Scope("prototype") —— 修改 类(Spring 容器管理), 使其不是 单例类
*/
/**
* 注解说明 —— 方法:
* @PostConstruct —— 该方法 在构造函数后 调用
* @PreDestroy —— 该方法 在销毁对象前 调用
*/
@Service // 业务组件用这个 注解
//@Scope("prototype") // 让 Bean 不是单例
public class AlphaService {// 构造函数public AlphaService() {System.out.println("实例化AlphaService");;}@PostConstruct // 在 构造之后调用 此初始化方法public void init() {System.out.println("初始化AlphaService");}@PreDestroypublic void destory() {System.out.println("销毁AlphaService");}
}
// Test 测试类 ... 省略类 定义, 直接给出 测试方法
/**
* 测试说明: 如果没有 指定 @Scope("prototype"); 则 下述写出的两个 对象构造过程 实际上只会执行一次对象构造 —— 单例效果。
* 依次输出 : 实例化AlphaService —— 初始化AlphaService —— 销毁AlphaService
*/
@Test
public void testBeanManagement() {AlphaService alphaService = applicationContext.getBean(AlphaService.class);System.out.println(alphaService);alphaService = applicationContext.getBean(AlphaService.class);System.out.println(alphaService);
}

Spring 容器中装配第三方 Bean

应用场景 : 在 项目中引用 第三方库 的 Bean

// 定义 配置 类 AlphaConfig 导入 第三方库中的 Bean —— 这里用 java 的 SimpleDateFormat
/**
* 注解说明:
* @Configuration —— 这是一个普通的配置类 (基于 Component 实现)
* @Bean —— 装配 第三方 Bean 或 自定义 Bean
*/
@Configuration // 表示 配置类
public class AlphaConfig {// 导入 官方Bean SimpleDateFormat@Beanpublic SimpleDateFormat simpleDateFormat() { // Bean 名就是 这个方法名return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 这是一个 官方的 Bean}
}
// Test 测试类 ... 省略类 定义, 直接给出 测试方法
@Test
public void testBeanConfig() {SimpleDateFormat simpleDateFormat =applicationContext.getBean(SimpleDateFormat.class);System.out.println(simpleDateFormat.format(new Date()));
}

使用 依赖注入 直接获取 Bean 的方式 —— 推荐

// Test 测试类 ... 省略类 定义, 直接给出 主要内容 及 测试方法
/**
* 注解说明:
* @Autowired —— 直接 声明 Bean 对象 ,将其注入到 Spring 容器中
* @@Qualifier("alphaHibernate") —— 如果 Bean 有多个实现类, 通过参数传递 指定实现类
*/
@Autowired // 使用 依赖注入 直接 获取 Bean, 不需要上述 的 操作
@Qualifier("alphaHibernate") // 指定 实现类
private AlphaDao alphaDao;@Autowired
private AlphaService alphaService;@Autowired
private SimpleDateFormat simpleDateFormat;@Test
public void testDI() {System.out.println(alphaDao);System.out.println(alphaService);System.out.println(simpleDateFormat);
}

controller 调用 service, service 调用 dao —— 依赖注入的综合示例

controller —— 定义请求接口, 调用 service

service —— 业务实现层, 调用 dao

dao —— 数据处理层, 调用数据库

// 模拟一个上述 接口请求 到 返回数据 的过程, 返回一个 String 模拟数据库数据
// 调用:
// 浏览器地址栏输入: localhost:8080/alpha/data/**
* controller.AlphaController
* 注解说明:
* @Controller —— 这是一个 接口定义类
* @RequestMapping("url_path") —— 请求的 url
* @ResponseBody —— 实际请求的 执行方法
*/
@Controller
@RequestMapping("/alpha")
public class AlphaController {@Autowiredprivate AlphaService alphaService;@RequestMapping("/data")@ResponseBodypublic String getData() {return alphaService.find();}
}/**
* service.AlphaService
*/
@Service
public class AlphaService {// ...@Autowiredprivate AlphaDao alphaDao;public String find() {return alphaDao.select();}
}/**
* dao.AlphaDao —— interface
* 两个 implements class : AlphaDaoHibernateImpl (name: alphaHibernate)  —— 省略不在这里列出
* AlphaDaoMyBatisImpl (@Primary)
*/
public interface AlphaDao {String select();
}@Repository
@Primary
public class AlphaDaoMyBatisImpl implements AlphaDao {@Overridepublic String select() {return "MybatisImpl";}
}/**
* main
*/
@SpringBootApplication // 自动配置 并生成 spring 容器, 不需要手动生成
public class CommunityApplication {public static void main(String[] args) {SpringApplication.run(CommunityApplication.class, args);}
}

【Spring】Spring入门相关推荐

  1. java中batch基础_详解Spring batch 入门学习教程(附源码)

    详解Spring batch 入门学习教程(附源码) 发布时间:2020-09-08 00:28:40 来源:脚本之家 阅读:99 作者:achuo Spring batch 是一个开源的批处理框架. ...

  2. Spring Boot 入门

    一.Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 2014,m ...

  3. Spring Boot入门——全局异常处理

    Spring Boot入门--全局异常处理 参考文章: (1)Spring Boot入门--全局异常处理 (2)https://www.cnblogs.com/studyDetail/p/702758 ...

  4. Spring Security 入门(五):在 Spring-Boot中的应用

    前言 本文作为入门级的DEMO,完全按照官网实例演示: 项目目录结构 Maven 依赖  <parent>    <groupId>org.springframework.bo ...

  5. Spring Security 入门(四):自定义-Filter

    前文导读 - Spring Security入门(一):登录与退出 - Spring Security入门(二):基于数据库验证 - Spring Security入门(三):密码加密 本文解决问题 ...

  6. Spring Security入门(三):密码加密

    前文导读 - Spring Security入门(一):登录与退出 - Spring Security入门(二):基于数据库验证 Github 地址 https://github.com/ChinaS ...

  7. Spring框架入门

    目录 Spring框架概述 1.Spring框架组成 2.使用spring有什么好处 3.为什么使用spring框架 4.Spring快速入门 4.1Spring IoC底层实现原理 4.2下载Spr ...

  8. Spring Boot 入门——Spring Boot 简介||微服务简介

    Spring Boot 入门 1.Spring Boot 简介 Spring Boot来简化Spring应用开发,约定大于配置, 去繁从简,just run就能创建一个独立的,产品级别的应用 简化Sp ...

  9. Spring教程--入门程序

    1 Spring框架的概述: 1.1 什么是Spring: Spring是分层的JavaSE/EE full-stack(一站式) 轻量级开源框架 * 分层: * SUN提供的EE的三层结构:web层 ...

  10. Spring Boot 入门(五):集成 AOP 进行日志管理

    本篇文章是接着 Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理写的,按照前面几篇博客的教程,可以搭建一个简单的项目,主要包含了 Pagehelper+MyBatis 分页 ...

最新文章

  1. python 井字游戏
  2. apache限制php上传大小修改
  3. 容器的基础 XmlBeanFactory(下篇)
  4. 在字符串中标红_在C ++中标记字符串
  5. java中数组操作常见的三个错误
  6. Spring Cloud学习系列第三篇【服务容错保护】
  7. 09_用户登录退出实现
  8. linux基础命令(一)
  9. 数字图像处理技术的应用领域
  10. php如何把汉字转换为拼音,php 把汉字转换为拼音 php 如何把拼音转换汉字
  11. 旧iPhone 通讯录数据如何完整迁移到新iPhone13?
  12. java生成树形Excel_java poi导出树形结构到excel文件
  13. 将OPenCV的Dll 动态连接库改名字,变成自己想要的动态连接库名字
  14. 熬夜爆肝整理!史上最硬核的Mysql函数大全,还不收藏?
  15. 了解计算机的历史用英语怎么说,关于计算机发展历史的论文参考文献 计算机发展历史英语参考文献哪里找...
  16. 半双工通信模块碰撞问题
  17. 数据可视化 数据可视化看板项目一:(1)模拟实时数据 -使用MYSQL的事件建立动态模拟数据,每秒更新一次 (1)
  18. 微信公众号支付: JSAPI缺少参数:total_fee ;没有生成预支付ID package=prepay_id=null;
  19. JS中的两个感叹号是什么意思
  20. 【Python学习】matplotlib学习总结——条形图

热门文章

  1. ts-学习类型-class
  2. 命名管道的数据通信代码
  3. 分享几张大佬程序员常用壁纸,你值得拥有!
  4. 华为云数据库实验-openGauss金融场景化实验出现的问题
  5. Flutter组件学习(13)层叠布局Stack、Positioned
  6. 论文投稿指南——中文核心期刊推荐(新闻事业)
  7. 枪火重生灵界狂潮攻略 (二)老虎流派
  8. HTTP的请求相应过程
  9. 海康萤石的本地在线码流
  10. ORA-00933: SQL命令未正确结束 解决办法