1、maven安装与测试

安装过程略,常用的maven命令行工具:

  • mvn --version 查看maven版本
  • mvn compile 编译maven工程
  • mvn clean 删除编译文件
  • mvn clean compile 先清理再编译
  • mvn clean test 清理完测试,test其实包含了compile
  • mvn archetype:generate -DgroupId=com.linklate.mavendemo1 -DartifactId=mavendemo1 -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false 创建一个maven工程

2、Spring简介

Spring Boot核心作用:

  • 起步依赖:每一个starter都是一堆dependency的集合

  • 自动配置:使用Spring框架可以省去很多配置,利用SpringBoot几乎不用做配置
  • 端点监控:项目上线后,对项目的运行状况可以进行监视

Spring全家桶:

  • Spring Framework 是其他组件的基石+核心
  • Spring Boot 更加方便的构建一个Spring项目
  • Spring Cloud 微服务,拆分成多个子项目,再集成为一个项目,便于维护,但开发难度有所提高
  • Spring Cloud Data Flow 数据集成功能,将多个客户端采集到的数据整合到一起

Spring Framework简介

  • Spring Core :主要包括IoC和AoP

    • IoC:基于面向对象的管理bean的思想;由Spring管理的对象一般称作bean
    • AoP:面向切面编程的思想
    • 二者都是用来管理对象的一种思想
  • Spring Data Access: Spring管理数据库的功能
    • Transaction 管理事务
    • Spring MyBatis 整合MyBatis
  • Web Servelet :web开发
    • Spring Mvc
  • Integration
    • Email:首发邮件功能
    • Scheduling:倒计时任务
    • AMQP:消息队列
    • Security:安全控制

IoC简介

IoC(Inversion of Control),控制反转思想,Spring其他组件都基于IoC

IoC:不用set方法去简建立bean之间的关系,从而减少bean之间的耦合度

如何实现IoC:依赖注入(DI),而IoC容器(本质上是一个工厂)是实现依赖注入的关键

需要提供Pojos和Configuration Metadata:

  • Pojos:bean的类型,要管理哪些bean
  • Configuration Metadata:用以描述bean之间的关系

produces:实例化bean,用以调用

Spring容器也称作IoC容器,用于管理bean,在Spring容器管理bean的前提下,bean与bean之间不会产生关联,它们的关联体现在配置当中。bean的耦合度因此得以降低。

3、Spring常用注解

  • @SpringBootConfiguration:被该注解标识的类均为Spring的配置文件,该注解由其他注解所组成,一般Spring程序的入口用此注解



    点进去,里面由三个子注解:

其中,

  • @SpringBootConfiguration表示该类是一个配置文件
  • @EnableAutoConfiguration表示启用自动配置功能
  • @ComponentScan组件扫描,自动扫描配置类所在包以及子包下的bean,并装配到Spring容器里
  • 其中,
    • bean上得有像@Controller、@Service、@Repository、@Component等注解才可以被扫描到
    • @Service 标识为业务组件
    • @Controller 标识为处理网页请求的组件
    • @Repository 标识为数据库访问的组件
    • @Component 任何地方都可使用

4、简单功能测试

在测试类中,打印输出Spring容器:



可以打印applicationcontext,说明该spring容器确实存在

需要说明的是:

  • BeanFactory:Bean容器的顶层接口
  • ApplicationContext是BeanFactory的子接口,功能更强,一般用这个。

简单写一个bean,从容器中获取bean

成功获取到bean

加了@Primary的注解的bean会被优先装配



每个bean的名字默认是类名(首字母小写),如果类名较长,也可以自定义这个名字

容器不仅能管理bean,还能初始化、销毁bean

要想容器帮助管理这个方法,即:让容器在合适的时候调用这个方法,只需要在方法之前加上注解@PostConstruct,这个注解的意思是该方法会在构造方法之后调用,用于初始化某些数据

@Predestroy:在销毁之前调用,可用于释放某些资源

测试方法

通过容器去获取service:

能获取到bean



被spring管理的bean,默认是单例的,从初始化到销毁,只创建一次



如果不希望单例,希望每次getbean都创建一个新的bean,则需要在bean上再添加一个Scope注解,即设置作用范围,默认是singleton。prototype为多实例,大多数情况下都使用默认单例



综上,spring能帮我们管理bean的作用域(有效范围)

有时希望,希望容器中装载一个第三方bean,这个·bean可能是打在jar包里,没有源码,打不上注解

此时,需要自己写一个配置类,然后在配置类中通过@bean注解进行声明,从而装配第三方类

@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

定义一个第三方类,需要一个bean注解

此方法返回的对象将被返回到容器里



前面是手动注入,比较笨重,但有助于理解IoC底层原理。

使用依赖注入,@Autowired自动注入更方便:

如果要指定某个bean注入,则使用@Qualifier注解

还可以将@Autowired加在构造器或set方法上

不过通常的使用方法都是加在属性上,这样使用比较方便

在项目开发中,由controller来处理浏览器的请求,处理浏览器请求的过程中会调用service业务组件去处理当前的业务,业务组件会调用dao去访问数据库,彼此互相依赖,这种依赖的方式就可以使用DI(依赖注入)的方式去实现。

通过IoC思想,项目中的bean,不是通过我们自己去实例化,也不是我们自己去set,而是通过容器去统一的管理,降低了bean之间的耦合度

Java社区——个人项目开发笔记(一)的更多相关文章

  1. Java社区——个人项目开发笔记(二)

    1.B\S架构通信原理 浏览器,服务器之间产生通信,浏览器访问服务器,服务器返回一个HTML,浏览器会对HTML进行解析,并渲染相关的内容. 在解析过程中,会发现HTML里引用了css文件,js文件, ...

  2. [Openwrt 项目开发笔记]:Openwrt平台搭建(一)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 最近开始着手进行Openwrt平台的物联网网关设 ...

  3. [openwrt 项目开发笔记]: 传送门

    “Openwrt 项目开发笔记”系列传送门: [Openwrt 项目开发笔记]:Openwrt平台搭建(一) (2014-07-11 00:11) [Openwrt 项目开发笔记]:Openwrt平台 ...

  4. [Openwrt 项目开发笔记]:PHP+Nginx安装(七)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一节中,我们已经搭建了MySQL数据库了,因 ...

  5. [Openwrt 项目开发笔记]:MySQL配置(六)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在本人的项目中,运行在路由器上的服务器采用Ngi ...

  6. [Openwrt 项目开发笔记]:DDNS设置(五)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一节中,我主要讲述了如何在Openwrt上安 ...

  7. [Openwrt 项目开发笔记]:Samba服务&vsFTP服务(四)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一节中,我们讲述了如何在路由器上挂载U盘,以 ...

  8. [Openwrt 项目开发笔记]:USB挂载& U盘启动(三)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一篇中,我结合Netgear Wndr370 ...

  9. [Openwrt 项目开发笔记]:Openwrt必要设置(二)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 前面的两篇blog中,我将如何搭建Openwrt ...

随机推荐

  1. 配置Mac 终端高亮

    mac下所有vim的配色方案的样式. 下面讲解如何设置这些好看的配色 首先:在终端输入 vim ~/.bash_profile 查看是否有上面提到的某些配色,所有配色均是以.vim结束的,果有的话,再 ...

  2. C语言:GB2312编码和GBK编码,将中文存储到计算机

    计算机是一种改变世界的发明,很快就从美国传到了全球各地,得到了所有国家的认可,成为了一种不可替代的工具.计算机在广泛流行的过程中遇到的一个棘手问题就是字符编码,计算机是美国人发明的,它使用的是 ASC ...

  3. C语言:文件

    文件是数据源的一种,最主要的作用是保存数据.在操作系统中,为了统一对各种硬件的操作,简化接口,不同的硬件设备也都被看成一个文件.对这些文件的操作,等同于对磁盘上普通文件的操作.例如: 通常把显示器称为 ...

  4. hapv-一个可以播放,下载国内主流视频的播放器

    electron 开发的一个可以播放,下载国内主流视频的播放器.A player developed by electron that can play and download domestic m ...

  5. 论文阅读:Visual-Inertial Localization With Prior LiDAR Map Constraints

    介绍 提出了一个低代价双目视觉惯导定位系统,实现了基于多状态约束下的卡尔曼滤波器(MSCKF)VIO,采用了先验雷达地图.除了稀疏的视觉特征,雷达地图与半稠密的点云也通过紧耦合的MSCKF进行更新,进 ...

  6. ubuntu18.04aliyun

    deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirr ...

  7. 使用vue-preview报错Cannot read property 'open' of undefined

    最近在做一个vue项目中时,需要使用vue-preview插件制作缩略图,首先在终端使用npm i vue-preview -S指令安装了vue-preview插件,然后在main.js中,导入并引用 ...

  8. python -- 面向对象编程(继承、重写)

    一.继承 子类可以继承父类的所有公有成员,但不能直接访问父类的私有成员,只能通过父类的公有方法间接访问私有属性或私有方法. 如: class DerviedClassName(BaseClassNam ...

  9. Java多线程(上)

    Java多线程 程序.进程和线程 一.程序 程序是存储在磁盘上, 包含可执行机器指令和数据的静态实体. 即进程或者任务是处于活动状态的计算机程序. 二.进程 进程是资源(CPU.内存等)分配的基本单位 ...

  10. 什么是 BPMN ?为什么我们要用 BPMN 和工作流 ?

    BPMN 和 Activiti 介绍 工作流介绍 在任何行业和企业中,都有各种各样的流程,例如: 请假流程 报销流程 入职流程 离职流程 出差流程 等等-- 就算你自己没有设计过工作流,那么你每天肯定 ...