Java社区——个人项目开发笔记(一)
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社区——个人项目开发笔记(一)的更多相关文章
- Java社区——个人项目开发笔记(二)
1.B\S架构通信原理 浏览器,服务器之间产生通信,浏览器访问服务器,服务器返回一个HTML,浏览器会对HTML进行解析,并渲染相关的内容. 在解析过程中,会发现HTML里引用了css文件,js文件, ...
- [Openwrt 项目开发笔记]:Openwrt平台搭建(一)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 最近开始着手进行Openwrt平台的物联网网关设 ...
- [openwrt 项目开发笔记]: 传送门
“Openwrt 项目开发笔记”系列传送门: [Openwrt 项目开发笔记]:Openwrt平台搭建(一) (2014-07-11 00:11) [Openwrt 项目开发笔记]:Openwrt平台 ...
- [Openwrt 项目开发笔记]:PHP+Nginx安装(七)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一节中,我们已经搭建了MySQL数据库了,因 ...
- [Openwrt 项目开发笔记]:MySQL配置(六)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在本人的项目中,运行在路由器上的服务器采用Ngi ...
- [Openwrt 项目开发笔记]:DDNS设置(五)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一节中,我主要讲述了如何在Openwrt上安 ...
- [Openwrt 项目开发笔记]:Samba服务&vsFTP服务(四)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一节中,我们讲述了如何在路由器上挂载U盘,以 ...
- [Openwrt 项目开发笔记]:USB挂载& U盘启动(三)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一篇中,我结合Netgear Wndr370 ...
- [Openwrt 项目开发笔记]:Openwrt必要设置(二)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 前面的两篇blog中,我将如何搭建Openwrt ...
随机推荐
- C# 8.0和.NET Core 3.0高级编程 分享笔记一:C#8.0与NET Core 3.0入门
在学习C#相关知识的过程中,我们使用Visual Studio Code来入门整个C#. 一.安装Visual Studio Core环境 通过https://code.visualstudio.co ...
- WPF教程九:理解WPF中的对象资源
在WPF中,所有继承自FrameworkElement的元素都包含一个Resources属性,这个属性就是我们这篇要讲的资源. 这一篇讲解的资源是不是上一篇的程序集资源(那个是在编译过程中打包到程序集 ...
- spring、springmvc、springboot、springcloud的联系与区别
spring和springMvc: 1. spring是一个一站式的轻量级的java开发框架,核心是控制反转(IOC)和面向切面(AOP),针对于开发的WEB层(springMvc).业务层(Ioc) ...
- Linux | 压缩与解压详解
tar tar 命令用于对文件进行打包压缩或解压,格式: tar [选项][文件] tar命令的参数及其作用 参数 作用 -c 创建压缩文件 -x 解开压缩文件 -t 查看压缩包内有哪些文件 -z 用 ...
- FA转发地址
1.FA地址诞生背景和作用 FA 是Forwarding Address的简写.FA是ASBR通告的TYPE 5 LSA中的字段,它的作用是告诉OSPF域内的路由器如何能够更快捷地到达LSA 5所通告 ...
- java基础---数组的排序算法(3)
一.排序的基本概念 排序:将一个数据元素集合或序列重新排列成按一个数据元素某个数据项值有序的序列 稳定排序:排序前和排序后相同元素的位置关系与初始序列位置一致(针对重复元素来说,相对位置不变) 不稳定 ...
- Javascript闭包解析----------------v客学院技术分享
跟java,php等编程语言一样,javascript也采用词法作用域,简单的来说就是函数的执行依赖于变量的作用域,这个作用域是在函数定义时决定的,而不是函数调用时决定的.为了实现这种词法作用域,还必 ...
- .Net Core微服务——自动收缩、健康检查:Consul(三)
继续上一篇的话题,顺便放上一篇的传送门:点这里. 健康检查 经过之前的操作,我的consul已经支持自动扩展,并且调用也很靠谱.但是这里有个问题,一旦服务列表里的某个服务挂了,consul并不知道,还 ...
- 40.qt quick- 高仿微信实现局域网聊天V4版本(支持gif动图表情包、消息聊天、拖动缩放窗口)
在上章37.qt quick- 高仿微信实现局域网聊天V3版本(添加登录界面.UDP校验登录.皮肤更换.3D旋转),我们已经实现了: 添加登录界面. UDP校验登录. 皮肤更换. 3D旋转(主界面和登 ...
- Dijkstra和堆优化
Dijkstra算法 由于我之前一直记的迪杰斯特拉的翻译导致我把dijkstra写成了dijstra--所以下文#define dijstra dijkstra 我以后叫她迪杰克斯歘! Dijskra ...