日期:2022/09/15
学习资源:B站狂神说
学习内容:Spring

1.Spring的优点:轻量、开源、简介、免费、Ioc、Aop
(1)什么叫做轻量级框架,它与侵入式框架、非侵入式框架的区别和联系?
答:侵入式框架:引入了框架,对现有的类的结构有影响,需要实现框架某些接口或者基础某些特定的类。侵入式让用户的代码对框架产生了依赖,不利于代码的复用,当去除框架的时候,程序就无法运行。当然侵入式可以使得用户的代码与框架更好的结合,充分利用框架提供的功能。(代码结构和框架产生耦合)例子:Struts1框架, Struts1代码严重依赖于Struts1 API,属于侵入性框架。

非侵入式框架:引入了框架,对现有的类结构没有影响,不需要实现框架某些接口或者特定的类。比如Spring框架,通过配置完成依赖注入就可以使用,当我们想换个框架,只需要修改相应的配置,程序仍然可以运行。(实际上一般Spring所倡导的无侵入性一般来说都是指它的IOC框架,象楼上所说的事务管理,或者诸如AOP等,都是有侵入的,如果设计的好的话,可以把损失降低到更小,但的确不是一点侵入都没有。)

(2)IOC:(控制反转):简单来说就是控制反转的核心及时依赖注入,也就是java是面向对象的一种语言,但是通过依赖注入到IOC容器中,我们可以将对象的创建交给Spring来管理,而我们更多的关注的是业务的实现!!!IOC更像是一种思想,由主动的编程变成了被动的接收!!
》》》IOC的实现方式:可以通过XML配置、注解…
》》》IOC的初始化过程:先读取配置文件、根据配置文件或者原数据创建与组织对象存入容器中,程序使用时再从IOC容器中去除相应的对象!!!

IOC(控制反转)是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现 控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)。

Bean的作用域:singleton(默认)、prototype、request、session

**单例bean情况如果在类中声明成员变量,并且有读写操作(有状态)线程不安全但是只要把成员变量声明到方法中(无状态)单例bean就是安全的。举个例子:

**

补充:Spingboot获取bean的方法,先配置一个工具类,然后输入以下代码,即可在测试类中利用该工具类获得bean实例。

package com.blog.util;import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;/*** 实现ApplicationContextAware接口,并加入Component注解,让spring扫描到该bean* 该类用于在普通Java类中注入bean,普通Java类中用@Autowired是无法注入bean的*/
@Component
public class SpringUtil implements ApplicationContextAware {private static ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {if(SpringUtil.applicationContext == null) {SpringUtil.applicationContext = applicationContext;}}/*** 获取applicationContext*/public static ApplicationContext getApplicationContext() {return applicationContext;}/***通过name获取 Bean.* @param name* @return*/public static Object getBean(String name){return getApplicationContext().getBean(name);}/*** 通过class获取Bean.* @param clazz* @param <T>* @return*/public static <T> T getBean(Class<T> clazz){return getApplicationContext().getBean(clazz);}/*** 通过name,以及Clazz返回指定的Bean* @param name* @param clazz* @param <T>* @return*/public static <T> T getBean(String name,Class<T> clazz){return getApplicationContext().getBean(name, clazz);}
}

注意注意注意:
alias:设置别名,即为bean对象设置别名,可以黑色还在多个别名。
import:主要也是用来将bean注入到容器中。
具体用法大家可以参照:https://www.cnblogs.com/msjhw/p/15739623.html

(3)AOP思想:在不改变原有代码的情况下,实现对原有功能的增强。
我感觉狂神的租房案例挺合适。
比如对于买房子这一行为,我们可以设计一个接口。
房主实现接口:我要买房子。
中介实现这个接口:我也实现买房子这个接口,并且将房主信息注册进来,另外再加上一些自己的收费方法!
买家:我得声明中介这个对象,向其买房子!!
这个中介就相当于代理:在这里我们主要说的是动态代理,因为动态代理包含了静态代理的

AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现 程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的 一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使 得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

面向AOP切面编程的实现方法总共有三种:
(1)通过声明SpringAPI接口实现。
(2)自定义类实现
(3)利用注解进行实现。

因为我喜欢面向注解进行开发所以在这里主要是以面向注解实现AOP编程为例:
在这里以SpringBoot为例进行测试:

(1)定义AOP的配置类:

package com.blog.config;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Component;@Configuration
@ComponentScan("com.blog.aspect")
@EnableAspectJAutoProxy
public class AopConfig {}

(2)定义一个切面:在这里着重讲一下Around(环绕)一定要注意他的返回值,而不是说加了这个方法就可以了,注意注意!!!!

package com.blog.aspect;import lombok.AllArgsConstructor;
import lombok.Data;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;@Aspect    //定义切面
@Component
public class LogAspect {private Logger logger = LoggerFactory.getLogger(this.getClass());@Pointcut("execution(* com.blog.controller.*.*(..))")        //定义切入点表达式public void log(){}@Before("log()")    //引用切入点public void doBefore(JoinPoint joinPoint){ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();String url = request.getRequestURL().toString();String ip = request.getRemoteAddr();//获得类名.方法名String classMethod = joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName();//获得方法参数Object[] args = joinPoint.getArgs();RequestLog requestLog = new RequestLog(url, ip, classMethod, args);//打印请求信息logger.info("Request: {}", requestLog);}@After("log()")public void doAfter(){logger.info("------------doAfter------------");}@AfterReturning(returning = "result", pointcut = "log()")public void doAfterReturn(Object result){//打印返回值logger.info("Result: {}", result);}@Data@AllArgsConstructorpublic class RequestLog{      //用于封装请求信息private String url;private String ip;private String classMethod;private Object[] args;}
}

具体结构:

(3)就可以进行测试了!配置完成!!1

2.Spring的组成:
(1)核心容器:关键配置:BeanFactory主要利用IOC模式将应用程序的配置与依赖性与实际的应用程序代码分开!!!
(2)Spring上下文:用于向Spring框架提供上下文信息。
(3) AOP:面向切面编程。最主要的就是为Spring的应用程序中的对象提供了事务管理服务!!!
(4)DAO层主要是用用于实现数据持久化操作,可用该结构来管理异常处理和不 同数据库供应商抛出的错误消息
(5)ORM(对象关系映射) ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。
(6)Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提 供了上下文.
(7)Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。

Spring学习个人记录相关推荐

  1. SAP Commerce开发时的Spring学习要点记录

    Spring framework BeanPostProcessor BeanFactoryPostProcessor AutowiredAnnotationBeanPostProcessor Bea ...

  2. 我的Spring学习记录(二)

    本篇就简单的说一下Bean的装配和AOP 本篇的项目是在上一篇我的Spring学习记录(一) 中项目的基础上进行开发的 1. 使用setter方法和构造方法装配Bean 1.1 前期准备 使用sett ...

  3. Spring 学习记录 冷兵器时代的故事

    这篇文章的内容和 Spring 没什么关系,但还是分类到 Spring 学习了. 首先,我们来将一个故事. 很久很久以前,冷兵器时代,人们用弓和箭打仗. 版本1 public class BowAnd ...

  4. Spring学习笔记(三) AOP_annotation,AOP_XML

    在学习课程以前,听说AOP有种很神秘的感觉,好像很好深的技术.其实原理很简单,使用动态代理的方式给程序增加逻辑.与此相似的有struts2中的filter拦截器. 再讲AOP之前先把需求说一下: 同S ...

  5. Spring学习总结三

    Spring框架JdbcTemplate与事务 Spring学习总结三 0.需要的jar包 1.JdbcTemplate模板 1.1.JdbcTemplateAPI的操作 1.1.1.User类 1. ...

  6. Spring学习总结二

    Spring框架的代理与AOP.AspectJ Spring学习总结二 0.在理解什么是AOP之前的一些话 1.什么是AOP 2.AOP的重要概念 3.代理模式 3.1.静态代理 3.2.动态代理 3 ...

  7. Spring学习总结一

    Spring框架IoC与DI思想及应用 Spring学习总结一 1.Spring是什么 2.Spring的优点 2.1.关键概念 2.2.Spring的优点 3.Spring的架构图 3.1.核心容器 ...

  8. Spring学习(三)Spring AOP 简介

    本文借鉴:Spring学习(特此感谢!) 一.简介 定义 aop就是面向切面编程,在数据库事务中切面编程被广泛使用. 在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能. 核心业务:比如登陆 ...

  9. Spring学习(一)初识Spring

    本文借鉴:Spring学习(特此感谢!) 一.简介 什么是Spring 定义:Spring 是一个轻量级的 DI / IoC 和 AOP 容器的开源框架,目的为了简化java开发. DI:注入 IOC ...

最新文章

  1. 为什么掌握 Linux 对程序员这么重要
  2. idea在mac版怎么配置svn_使用Mac自带svn搭建服务器,并使用idea进行连接
  3. block作用域与流程控制(块block、if-else、while、do-while、for-foreach、switch-case、break、continue、label)
  4. CodeForces - 894B Ralph And His Magic Field(组合数学+思维)
  5. java abstractset 继_java集合框架-AbstractSet
  6. 蚂蚁爬杆 java_java蚂蚁爬杆
  7. java中类作为成员变量类型使用、接口作为成员变量类型使用、接口作为方法的参数或返回值使用
  8. I00019 生成全8数
  9. 学习笔记之15道简单算法题
  10. 「创作之秋」| 参赛成员- 获奖名单(参与奖)
  11. Pwn入门之ELF文件
  12. 关于Java堆栈的理解与说明
  13. 关于vscode打感叹号无法输出html模板的解决方法
  14. 质量功能配置(QFD)矩阵
  15. 交换机 路由器模拟仿真软件命令
  16. java.util.concurrent.ExecutionException 错误解决。
  17. 关于BGA芯片布局时要注意的要点
  18. 最后一公里极速配送(三)
  19. 打印表格留标题怎么设置_Excel表格打印时每页都有表头标题,是怎样设置的?...
  20. 虚拟化VMware简介6——VMotion 简介

热门文章

  1. UML建模详解(1)—初识UML建模
  2. 重学Java设计模式-创建者模式-建造者模式
  3. String s=new String(xback)和String s=xback的区别?
  4. RT-Thread——STM32——FAL库
  5. 学习canvas(一):用线画出正方形和三角形
  6. 虚拟机linux防火墙配置,Linux防火墙配置
  7. vue-router路由的安装、配置、具体用法和Vue-router学习笔记
  8. Oracle数据库配置二
  9. linux yum安装rar解压软件
  10. C语言实现windows窗口滑动条,四、Windows子窗口控件的滚动条类别—窗口子类别化(Window Subc...