首页 > 其他分享 >Spring学习笔记

Spring学习笔记

时间:2023-05-25 10:14:25浏览次数:56  
标签:spring Spring Bean 笔记 学习 bean AOP 注解

1、基本概念

Spring:

  • 开源的轻量级的java开发框架,目的是提高开发人员的开发效率以及系统的可维护性。
  • 核心功能是支持IOC(控制反转)和AOP(面向切面编程)
  • 可以很方便地对数据库进行访问、可以很方便地集成第三方组件(电子邮件,任务,调度,缓存等等)、对单元测试支持比较好、支持 RESTful Java 应用程序的开发。
  • 是很多模块的集合:包括core-container(spring-core、spring-beans)、AOP(spring-aop、spring-aspects)、data access(spring-jdbc、spring-orm)、spring web(spring-web、spring-mvc、spring-websocket)、messaging、spring test

 2、IOC

  • 思想:IoC 的思想就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理。
  • 具体实现:将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注入。使用xml或者注解将某类配置为bean,使用@autowired注解就可以实现依赖注入。

(1)IoC 容器:实际上就是个 Map(key,value),Map 中存放的是各种对象。

(2)bean:Bean 代指的就是那些被 IoC 容器所管理的对象。

(3)声明为bean的注解有

  • @Component:通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注。
  • @Repository : 对应持久层即 Dao 层,主要用于数据库相关操作。
  • @Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。
  • @Controller : 对应 Spring MVC 控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面。

(4)@Component和@bean的区别:

  • @Component 注解作用于类,而@Bean注解作用于方法。
  • @Component通常是通过类路径扫描来自动侦测以及自动装配到 Spring 容器中(我们可以使用 @ComponentScan 注解定义要扫描的路径从中找出标识了需要装配的类自动装配到 Spring 的 bean 容器中)。@Bean 注解通常是我们在标有该注解的方法中定义产生这个 bean,@Bean告诉了 Spring 这是某个类的实例,当我需要用它的时候还给我。
  • @Bean 注解比 @Component 注解的自定义性更强,而且很多地方我们只能通过 @Bean 注解来注册 bean。比如当我们引用第三方库中的类需要装配到 Spring容器时,则只能通过 @Bean来实现。
(5)注入bean的注解有:@autowired、@resource、@inject   @autowired和@resource区别:
  • @Autowired 是 Spring 提供的注解,@Resource 是 JDK 提供的注解。
  • Autowired 默认的注入方式为byType(根据类型进行匹配),@Resource默认注入方式为 byName(根据名称进行匹配)。
  • 当一个接口存在多个实现类的情况下,@Autowired@Resource都需要通过名称才能正确匹配到对应的 Bean。Autowired 可以通过 @Qualifier 注解来显式指定名称,@Resource可以通过 name 属性来显式指定名称
(6)bean的作用域:

Spring 中 Bean 的作用域通常有下面几种:

  • singleton : IoC 容器中只有唯一的 bean 实例。Spring 中的 bean 默认都是单例的,是对单例设计模式的应用。
  • prototype : 每次获取都会创建一个新的 bean 实例。也就是说,连续 getBean() 两次,得到的是不同的 Bean 实例。
  • request (仅 Web 应用可用): 每一次 HTTP 请求都会产生一个新的 bean(请求 bean),该 bean 仅在当前 HTTP request 内有效。
  • session (仅 Web 应用可用) : 每一次来自新 session 的 HTTP 请求都会产生一个新的 bean(会话 bean),该 bean 仅在当前 HTTP session 内有效。
  • application/global-session (仅 Web 应用可用):每个 Web 应用在启动时创建一个 Bean(应用 Bean),该 bean 仅在当前应用启动时间内有效。
  • websocket (仅 Web 应用可用):每一次 WebSocket 会话产生一个新的 bean。
(7)bean的生命周期:

 3、AOP

  • AOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑代码(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。
  (1)Spring AOP 与AspectJ AOP区别:
  • Spring AOP 属于运行时增强,而 AspectJ 是编译时增强。
  • Spring AOP 基于动态代理(Proxying),而 AspectJ 基于字节码操作(Bytecode Manipulation)。
  • AspectJ 相比于 Spring AOP 功能更加强大,但是 Spring AOP 相对来说更简单,
  • 如果我们的切面比较少,那么两者性能差异不大。但是,当切面太多的话,最好选择 AspectJ ,它比 Spring AOP 快很多。
 

标签:spring,Spring,Bean,笔记,学习,bean,AOP,注解
From: https://www.cnblogs.com/coooookie/p/17430308.html

相关文章

  • Springboot @Value注解
    配置文件test:name:123list:1,2,3aa:userInfoServiceImpl.merChantNoController:@Value("${test.name}")publicStringname1;//输出123@Value("#{'${test.list}'}")publicList<Object>list;//输出[1,2,3]......
  • MyBatis体系笔记(未完结)
    MyBatis什么是MyBatisMyBatis是优秀的持久层框架MyBatis使用XML将SQL与程序解耦,便于维护MyBatis学习简单,执行高效,是JDBC的延伸1.MyBatis开发流程引入MyBatis依赖创建核心配置文件创建实体(Entity)类创建Mapper映射文件初始化SessionFactory......
  • 【Spring从成神到升仙系列 一】2023年再不会动态代理,就要被淘汰了
    ......
  • SpringBoot 出现 Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘
    问题点1:如果Content-Type设置为“application/x-www-form-urlencoded;charset=UTF-8”无论是POST请求还是GET请求都是可以通过这种方式成功获取参数,但是如果前端POST请求中的body是Json对象的话,会报上述错误。请求中传JSON时设置的Content-Type如果是application/json或者tex......
  • 走进Linux世界,学习Linux系统的必备指南
    随着计算机技术的不断发展,Linux操作系统已成为IT行业中备受关注的操作系统之一。Linux以其安全性、稳定性和开放性,受到了广泛的认可和欢迎。学习Linux系统对于IT行业的从业者来说是非常重要的。但是,对于初学者来说,学习Linux可能会感到有些困难。 所以,我今天我打算给初学者们答......
  • constexpr学习
    constexptr和常量表达式常量表达式是指值不会改变并且在编译过程中就能得到计算结果的表达式。编译过程中得到计算结果。字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。一个对象(或表达式)是不是常量表达式由它的数据类型和初始值共同决定。(注意!!!)对于这条语......
  • Zookeeper学习大纲
    ZooKeeper学习大纲ZooKeeper应用及原理解析Zookeeper介绍什么是ZookeeperZookeeper的应用场景搭建Zookeeper服务器zoo.cfg配置文件说明Zookeeper服务器的操作命令Zookeeper内部的数据模型zk是如何保存数据zk中的znode是什么样的结构zk中节点znode的类型zk的数......
  • 这可能是最全面的Java学习路线了
    大家好,我是大彬~我本科学的不是计算机,大四开始自学Java,并且拿到了几个互联网中大厂的offer。在学习Java这方面还是比较有经验的,下面我来分享下我整理的Java自学路线。在这里也提醒学弟学妹们,要尽早确定以后的方向,读研还是工作,找工作的话,也要尽快确定工作岗位,想转行的,需要花更多......
  • YOLOv5s训练学习记录 - test
    armorFinder_ROS2YOLOv5s训练学习记录:训练、获取模型YOLOv5初级使用教程下载yolov5git上下载Yolov5并调通测试代码数据集准备与文件夹结构这里我使用的是之前提供的装甲板数据集'RM_train_data'这个和原本提供的'RM_train_data'不太一样,需要改成下边的样子├─images│......
  • spring booot arthas报错
    Causedby:org.springframework.beans.BeanInstantiationException:Failedtoinstantiate[com.taobao.arthas.agent.attach.ArthasAgent]:Factorymethod'arthasAgent'threwexception;nestedexceptionisjava.lang.IllegalStateException:java.lang.ref......