通过构造器注入
private AlarmContactService alarmContactService;
private final AlarmService alarmService;
private final SysUserService sysUserService;
@Autowired
public AlarmContactController(AlarmContactService alarmContactService, AlarmService alarmService,SysUserService sysUserService) {
this.alarmContactService = alarmContactService;
this.alarmService = alarmService;
this.sysUserService = sysUserService;
}
通过 setter 注入
private AlarmContactService alarmContactService;
private AlarmService alarmService;
private SysUserService sysUserService;
@Autowired
public void setAlarmContactService(AlarmContactService alarmContactService) {
this.alarmContactService = alarmContactService;
}
@Autowired
public void setAlarmService(AlarmService alarmService) {
this.alarmService = alarmService;
}
@Autowired
public void setSysUserService(SysUserService sysUserService) {
this.sysUserService = sysUserService;
}
通过 filed 注入
@Autowired
private AlarmContactService alarmContactService;
@Autowired
private AlarmService alarmService;
@Autowired
private SysUserService sysUserService;
? Spring 装配包括手动装配
和自动装配
,手动装配方式可以基于 xml 装配、构造方法、setter 方法等。自动装配有五种自动装配的方式,可以用来指导 Spring 容器用自动装配方式来进行依赖注入。
no:默认的方式是不进行自动装配,通过显式设置 ref 属性来进行装配。
byName:通过参数名 自动装配,Spring 容器在配置文件中发现 bean 的 autowire 属性被设置成 byname,之后容器试图匹配、装配和该 bean 的属性具有相同名字的 bean。
byType:通过参数类型自动装配,Spring 容器在配置文件中发现 bean 的 autowire 属性被设置成 byType,之后容器试图匹配、装配和该 bean 的属性具有相同类型的 bean。如果有多个 bean 符合条件,则抛出错误。
constructor:这个方式类似于 byType, 但是要提供给构造器参数,如果没有确定的带参数的构造器参数类型,将会抛出异常。
autodetect:首先尝试使用 constructor 来自动装配,如果无法工作,则使用 byType 方式。
? AOP (Aspect Orient Programming), 直译过来就是面向切面编程。AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。
? "横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。
? Spring 通过对目标对象使用代理模式生成代理对象的方式来实现 AOP。有两种主要的方式 JDK 的动态代理和 CGLIB 的动态代理,默认使用 JDK 方式。
? 场景一: 记录日志
? 场景二: 监控方法运行时间 (监控性能)
? 场景三: 权限控制
? 场景四: 缓存优化 (第一次调用查询数据库,将查询结果放入内存对象, 第二次调用, 直接从内存对象返回,不需要查询数据库 )
? 场景五: 事务管理 (调用方法前开启事务, 调用方法后提交关闭事务 )
? Spring MVC 中的拦截器(Interceptor)类似于 Servlet 中的过滤器(Filter),它主要用于对处理器进行预处理和后处理,同时也提供了一种可以提取处理器中可重用部分的方式。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。
? 在一个项目中可以设置多个拦截器,这些拦截器按一定的顺序联结成一条链,这条链称为拦截器链。 在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用,拦截器也是 AOP 思想的具体实现。
? Spring MVC 中拦截器是实现了 HandlerInterceptor 接口的 Bean:
public interface HandlerInterceptor {
boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception;
void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception;
void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler, Exception ex) throws Exception;
}
preHandle():预处理回调方法,若方法返回值为 true,请求继续(调用下一个拦截器或处理器方法);若方法返回值为 false,请求处理流程中断,不会继续调用其他的拦截器或处理器方法,此时需要通过 response 产生响应;
postHandle():后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时可以通过 modelAndView 对模型数据进行处理或对视图进行处理
afterCompletion():整个请求处理完毕回调方法,即在视图渲染完毕时调用
? Spring Boot 的特点:
(1)快速开发 Spring 应用的框架
(2)内嵌 Tomcat 和 Jetty 容器,不需要单独安装容器,jar 包直接发布一个 Web 应用
(3)简化 Maven 配置,继承父工程这种方式,一站式引入需要的各种依赖
(4)基于注解的零配置思想
(5)和各种流行框架 Spring MVC、Mybatis、Spring Cloud 无缝整合
? Maven 是一个项目管理工具。它负责管理项目开发过程中的几乎所有的东西。
??仓库:存放 jar 的地方可以通过 Manen 坐标准确的找到仓库中的 jar 包并添加到工程依赖中。
? 仓库的分类:
??1、本地仓库:当前电脑上的仓库
??2、远程仓库:
? 私服:搭建在局域网中,一般公司都会有私服,私服一般使用 nexus 来搭建。具体搭建过程可以查询其他资料
? 中央仓库:架设在 Internet 上,像刚才的 springframework 就是在中央仓库上
??坐标:使用下面的三个向量在仓库中唯一的定位一个 Maven 工程 (jar 包)。
? Git 是目前世界上最先进的分布式版本控制系统。
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
? Svn 是集中式的版本控制系统。可以看出 Svn 集中式版本控制都是把所有的版本存储在 Svn 服务器中且必须要联网到 Svn 服务器才可以进行版本的回退、更新等操作。
? 假如哪天 Svn 服务器坏了,那么所有的版本代码都将丢失,也就无法获取代码和回退版本等操作。
? Git 是分布式版本控制系统。使用 Git 每个电脑都有完整的版本号和日志信息。且没有网的时候,Git 照样可以工作,只是把代码提交到本地,待有网再提交到远程 Git 仓库。就算哪天 Git 服务器坏了也没事,因为本地仓库都保存了完整的版本。
? Git:是一种版本控制系统,是一个命令,是一种工具,有点像 cmd(命令行工具)。
? Github:是一个基于 git 实现在线代码托管的仓库,向互联网开放,企业版要收钱。
? Gitlab:类似 github,一般用于在企业内搭建 git 私服,要自己搭环境。
? Gitee:即码云,是 oschina 免费给企业用的,不用自己搭建环境,可以建立自己的私有仓库。
? Git-ce:是社区版,gitlab-ee 是企业版,收费的。