spring-02

spring-02

1、谈谈你对 Spring 的理解
  Spring 是一个开源框架,为简化企业级应用开发而生。Spring 可以是使简单的 JavaBean 实现以前只有 EJB 才能实现的功能。Spring 是一个 IOC 和 AOP 容器框架。
Spring 容器的主要核心是
控制反转(IOC)
  传统的 java 开发模式中,当需要一个对象时,我们会自己使用 new 或者 getInstance 等直接或者间接调用构造方法创建一个对象。而在 spring 开发模式中,spring 容器使用了工厂模式为我们创建了所需要的对象,不需要我们自己创建了,直接调用 spring 提供的对象就可以了,这是控制反转的思想。
依赖注入(DI)
  spring 使用 javaBean 对象的 set 方法或者带参数的构造方法为我们在创建所需对象时将其属性自动设置所需要的值的过程,就是依赖注入的思想。
面向切面编程(AOP)
  在面向对象编程(oop)思想中,我们将事物纵向抽成一个个的对象。而在面向切面编程中,我们将一个个的对象某些类似的方面横向抽成一个切面,对这个切面进行一些如权限控制、事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。AOP 底层是动态代理,如果是接口采用 JDK 动态代理,如果是类采用CGLIB 方式实现动态代理。
2、Spring 中的设计模式
a:单例模式——spring 中两种代理方式,若目标对象实现了若干接口,spring 使用 jdk 的 java.lang.reflect.Proxy类代理。若目标兑现没有实现任何接口,spring 使用 CGLIB 库生成目标类的子类。
  单例模式——在 spring 的配置文件中设置 bean 默认为单例模式。
b:模板方式模式——用来解决代码重复的问题。
  比如:RestTemplate、JmsTemplate、JpaTemplate
d:前端控制器模式——spring 提供了前端控制器 DispatherServlet 来对请求进行分发。
e:试图帮助(view helper)——spring 提供了一系列的 JSP 标签,高效宏来帮助将分散的代码整合在试图中。
f:依赖注入——贯穿于 BeanFactory/ApplacationContext 接口的核心理念。
g:工厂模式——在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用同一个接口来指向新创建的对象。Spring 中使用 beanFactory 来创建对象的实例。
3、Spring 的常用注解
  Spring 在 2.5 版本以后开始支持注解的方式来配置依赖注入。可以用注解的方式来代替 xml 中 bean 的描述。注解注入将会被容器在 XML 注入之前被处理,所以后者会覆盖掉前者对于同一个属性的处理结果。注解装配在 spring 中默认是关闭的。所以需要在 spring 的核心配置文件中配置一下才能使用基于注解的装配模式。配置方式如下:
注解装配在默认情况下是不开启的,为了使用注解装配,我们必须在Spring配置文件中配置 <context:annotation-config/>元素
常用的注解:
@Required:该注解应用于设值方法
@Autowired:该注解应用于有值设值方法、非设值方法、构造方法和变量。
@Qualifier:该注解和@Autowired 搭配使用,用于消除特定 bean 自动装配的歧义。
4、 Spring bean 的生命周期
01)实例化一个Bean,也就是我们通常说的new
02)按照Spring上下文对实例化的Bean进行配置,也就是IOC注入
03)如果这个Bean实现了BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,此处传递的是Spring配置文件中Bean的ID
04)如果这个Bean实现了BeanFactoryAware接口,会调用它实现的setBeanFactory(),传递的是Spring工厂本身(可以用这个方法获取到其他Bean)
05)如果这个Bean实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文,该方式同样可以实  现步骤4,但比4更好,以为ApplicationContext是BeanFactory的子接口,有更多的实现方法
06)如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor经常被用作是Bean内容的更改,并且由于这个是在Bean初始化结束时调用After方法,也可用于内存或缓存技术
07)如果这个Bean在Spring配置文件中配置了init-method属性会自动调用其配置的初始化方法
08)如果这个Bean关联了BeanPostProcessor接口,将会调用postAfterInitialization(Object obj, String s)方法
  注意:以上工作完成以后就可以用这个Bean了,那这个Bean是一个single的,所以一般情况下我们调用同一个ID的Bean会是在内容地址相同的实例
09)当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean接口,会调用其实现的destroy方法
10)最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法
5、ApplicationContext 的实现类有哪些? 
FileSystemXmlApplicationContext :此容器从一个 XML 文件中加载 beans 的定义,XML Bean 配置文件的全路径名必须提供给它的构造函数。
ClassPathXmlApplicationContext:此容器也从一个 XML 文件中加载 beans 的定义,这里,你需要正确设置classpath 因为这个容器将在 classpath 里找 bean 配置。
WebXmlApplicationContext:此容器加载一个 XML 文件,此文件定义了一个 WEB 应用的所有 bean。
6、BeanFactory 与 AppliacationContext 有什么区别
1)BeanFactory
 基础类型的 IOC 容器,提供完成的 IOC 服务支持。如果没有特殊指定,默认采用延迟初始化策略。相对来说,容器启动初期速度较快,所需资源有限。
2)ApplicationContext
 ApplicationContext 是在 BeanFactory 的基础上构建,是相对比较高级的容器实现,除了 BeanFactory 的所有支持外,ApplicationContext 还提供了事件发布、国际化支持等功能。ApplicationContext 管理的对象,在容器启动后默认全部初始化并且绑定完成。
7、在 Spring 中如何注入一个 java 集合?
Spring 提供以下几种集合的配置元素:
<list>类型用于注入一列值,允许有相同的值。
<set> 类型用于注入一组值,不允许有相同的值。
<map> 类型用于注入一组键值对,键和值都可以为任意类型。
<props>类型用于注入一组键值对,键和值都只能为 String 类型。
8、在 Spring 框架中如何更有效地使用 JDBC?
  使用 SpringJDBC 框架,资源管理和错误处理的代价都会被减轻。所以开发者只需写 statements 和 queries 从数据存取数据,JDBC 也可以在 Spring 框架提供的模板类的帮助下更有效地被使用,这个模板叫 JdbcTemplate 。
  JdbcTemplate 类提供了很多便利的方法解决诸如把数据库数据转变成基本数据类型或对象,执行写好的或可调用的数据库操作语句,提供自定义的数据错误处理。
9、使用 Spring 通过什么方式访问 Hibernate?
在 Spring 中有两种方式访问 Hibernate:
1)控制反转 HibernateTemplate 和 Callback。
2)继承 HibernateDAOSupport 提供一个 AOP 拦截器。

转载于:https://www.cnblogs.com/cao-yin/p/10554476.html

[INFO] +- org.springframework.boot:spring-boot-starter-websocket:jar:2.2.5.RELEASE:compile [INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.2.5.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot-starter-json:jar:2.2.5.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot-starter-tomcat:jar:2.2.5.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot-starter-validation:jar:2.2.5.RELEASE:compile [INFO] +- org.springframework.boot:spring-boot-starter:jar:2.2.5.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot:jar:2.2.5.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot-autoconfigure:jar:2.2.5.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot-starter-logging:jar:2.2.5.RELEASE:compile [INFO] +- org.springframework.boot:spring-boot-devtools:jar:2.2.5.RELEASE:compile (optional) [INFO] +- org.springframework.boot:spring-boot-starter-data-jpa:jar:2.2.5.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot-starter-aop:jar:2.2.5.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot-starter-jdbc:jar:2.2.5.RELEASE:compile [INFO] +- org.springframework.boot:spring-boot-starter-data-redis:jar:2.2.5.RELEASE:compile [INFO] +- com.alibaba:druid-spring-boot-starter:jar:1.2.8:compile [INFO] +- org.springframework.boot:spring-boot-starter-test:jar:2.2.5.RELEASE:test [INFO] | +- org.springframework.boot:spring-boot-test:jar:2.2.5.RELEASE:test [INFO] | +- org.springframework.boot:spring-boot-test-autoconfigure:jar:2.2.5.RELEASE:test
03-17
<think>好的,用户现在发了一个关于Spring Boot依赖树的日志,询问如何查看版本。之前我已经回答过五种方法,用户可能现在遇到了具体的依赖树,需要进一步确认版本信息。 首先,用户提供的日志中有多行依赖项,每个都带有版本号2.2.5.RELEASE。我需要指出这些信息都一致,说明整个项目使用的是Spring Boot 2.2.5版本。需要确认用户是否理解如何从这些行中提取版本号,或者是否存在疑问。 其次,用户可能想知道为什么所有模块的版本都相同,是否需要检查是否有不一致的地方。这里需要解释Maven或Gradle的依赖管理机制,父POM如何统一版本,确保各模块版本一致,避免冲突。 另外,用户可能对2.2.5.RELEASE这个版本的状态有疑问,比如是否过时,是否需要升级。这时候可能需要提供版本的生命周期信息,比如该版本是否还在维护,是否有安全漏洞需要处理。 还要注意用户之前提到过JDK版本的问题,可能在使用过程中遇到兼容性问题,比如Spring Boot 2.2.5对应的JDK版本是什么,是否支持用户当前的环境。需要结合之前的交流,给出兼容性建议。 另外,用户提供的依赖树中有一些starter,比如websocket、web、data-jpa、data-redis等,可能需要提醒用户检查这些依赖是否都是项目需要的,避免引入不必要的库,增加项目体积。 最后,用户可能想确认是否有更好的方法来验证版本,比如使用Maven命令或者代码中获取版本号,是否需要进一步的步骤来确保版本正确无误。需要总结关键点,确保用户能够明确版本信息,并了解后续行动的建议。</think>--- ### **分析结果与关键信息提取** #### **1. Spring Boot 版本确认** 从您提供的依赖树中,所有Spring Boot组件版本均显示为 `2.2.5.RELEASE`: ```text [INFO] +- org.springframework.boot:spring-boot-starter-websocket:jar:2.2.5.RELEASE:compile [INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.2.5.RELEASE:compile ...(其他依赖项均使用相同版本) ``` **结论**:当前项目使用的 **Spring Boot 版本为 `2.2.5.RELEASE`**。 --- #### **2. 版本统一性验证** 所有Spring Boot相关依赖(如`spring-boot-starter-web`、`spring-boot-starter-data-jpa`等)均保持版本一致(`2.2.5.RELEASE`),说明项目中已正确通过 **父POM继承** 或 **依赖管理模块** 统一管理版本,避免了依赖冲突。 --- #### **3. 版本生命周期与兼容性参考** | Spring Boot 版本 | 发布日期 | 官方维护状态 | 兼容JDK范围 | |-------------------|-------------|---------------------|------------------| | 2.2.5.RELEASE | 2020-02-20 | **已结束支持**(EOL)| JDK 8-13 | **关键建议**: - ❗️ 此版本已超过官方维护周期(Spring Boot 2.2.x 的维护已于 2020-08-20 结束),**存在安全风险**。 - 推荐升级至 **Spring Boot 2.7.x(L
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值