【Spring开发】—— Spring Core

简介: 原文:【Spring开发】—— Spring Core 前言   最近由于一些工作的需要,还有自己知识的匮乏再次翻开spring。正好整理了一下相关的知识,弥补了之前对spring的一些错误认知。
原文: 【Spring开发】—— Spring Core

前言

  最近由于一些工作的需要,还有自己知识的匮乏再次翻开spring。正好整理了一下相关的知识,弥补了之前对spring的一些错误认知。这一次学习,更加深入的理解了Ioc和AOP的思想,并对其架构模块有了更深一步的理解。

  刚开始翻看spring技术内幕,虽然有了一点看源码的经验,但是直接看如此深的源码,还是很头疼。spring由于业务的扩展,以及用户群的增加,对于某些模块的类封装的很深!因此追溯源码是个很头疼的问题,而直接看这本书,也是压力山大。

  于是回去复习一下spring的基本知识,先学会走,在学跑。

  先说说spring的核心模块相关的概念,IOC和AOP。

  IoC(inversion of control)控制反转,也就是说,控制权由对象转移,对象自己变成了被动的接受。

  DI(dependency injection)依赖注入

  AOP(aspect oriented programming)面向切面编程

 

  先简单的说说这个AOP  

 

  AOP中利用面向切面的编程理论,把每个方法或者函数当做一个切面,在这个切面前后都可以执行不同的方法。

1 <bean id="service">
2     <property name="interceptorNames" value="advisor"></property>
3     <property name="target">目标</property>
4 </bean>

  这里定义了一个拦截器,一个目标bean。

1 <bean id="advisor" class="...">
2     <property name="advice">//拦截器对象
3     </property>
4     <property name="mappedName">//拦截的方法
5     </property>
6 </bean>

  这个目标bean在执行时,会根据配置来确定切面,精确到某个方法。而拦截的方法由上面的mappedName确定,可以通过名字或者通过正则表达式来确定。拦截器对象确定了拦截时触发的函数。

  可以进行方法前拦截、方法后拦截、异常拦截。

 

  

  可以看到Spring Core是spring框架中最低层核心的模块。提供了最基本的Ioc思想框架。

 

  下面讲解一下如何使用!

 

  由于spring是把一个类配置在xml配置文件中,从而进行一些相关的依赖或者注入等等。那么这个配置文件,肯定要被本地化存储并且进行读取。

  因此在我们使用前,要进行三步:

  读取spring配置文件

  bean定义

  注入到Ioc容器

  之后我们就可以通过bean工厂的getBean获取指定的bean了。

  1 常见的读取配置文件的三种方法:

  1 利用ClassPathResource读取资源文件,传入XmlBeanFactory中

1 ClassPathResource res = new ClassPathResource("application.xml")
2 XmlBeanFactory factory - new XmlBeanFactory(res);
3 factory.getBean("testBean");

  2 利用输入流,传入到XmlBeanFactory中

1 InputStream is = new FileInputStream("C:\\ApplicationContext.xml");
2 XmlBeanFactory factory - new XmlBeanFactory(is);

  3 直接通过ClassPathXmlApplicationContext读取资源文件

ClassPathXmlAppliationContext appContext = new ClassPathXmlApplicationContext("aaplicationContext.xml");

  4 通过在web.xml中指定配置文件的目录,自动读取。关于配置文件的路径有很多种写法,通过指定ClassPath也可以。

 1 <listener>
 2         <listener-class>
 3             org.springframework.web.context.ContextLoaderListener
 4         </listener-class>
 5     </listener>
 6 
 7 <context-param>
 8   <param-name> contextConfigLocation</param-name>
 9              <param-value>
10                   /WEB-INF/classes/bean.xml
11              </param-value>
12  </context-param>

  

  2 Bean的定义这部分就没什么好说的了,就是读取配置文件,解析里面的文件定义,抽取成数据模型。

  3 而注入到Ioc容器中,就是把这个数据模型读取到一个总的BeanFactory中,统一的进行管理。

 

  我们就可以通过这个BeanFactory进行一些操作,比如GetBean()或者containsBean()等等。

 

  杂七杂八

 

  下面简单的罗列了一些配置的内容:

  1 工厂模式
<bean id="examples.MyFactoryBean" factory-method="createInstance"/>

  2 构造函数

<bean id="testBean" class="examples.ExampleBean">
    <constructor-arg><ref bean="testArgs1"/></construtor-arg>
    <constructor-arg><ref bean="testArgs2"/></construtor-arg>
</bean>
 相当于
class testBean{
    public testBean(testArgs1,testArgs2);
}

  3 单例模式

<bean id="testBean" class="test.testBean" singleton="false"> 每次请求生成的都是同一个bean

  4 <idef> 与 <ref>作用相同,但是idef会在xml加载时 检查 bean是否存在

destroy-method 销毁,通常都是配置数据源、JDBC、输入输入流时,需要在close时销毁对象
depends-on 先后顺序实例化
init-method 初始化调用方法
  8 也可以通过指定的接口,java类进行相应的操作:
BeanNameAware 让类知道自己bean在xml中的id名字
BeanFactoryAware 获得beanFactory
InitializingBean接口执行初始化方法
Disposablebean 执行销毁方法

  9 属性覆盖,这个通常是在配置了一些属性,但是有其他的一些文件修改了这个属性时,使用。

  比如说,我们在项目中通过spring的配置文件配置了数据源的相关信息,但是额外有一个xxx.properties进行信息的重写。当有这个文件时,可以让客户自己修改其连接信息,而不用每次都去修改繁琐的spring配置文件。

org.springframework.beans.factory.config.PropertyPlaceholderConfigurer

 

  

  

目录
相关文章
|
3月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
63 4
|
11天前
|
人工智能 前端开发 Java
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
本文介绍了如何使用Spring AI Alibaba开发一个简单的AI对话应用。通过引入`spring-ai-alibaba-starter`依赖和配置API密钥,结合Spring Boot项目,只需几行代码即可实现与AI模型的交互。具体步骤包括创建Spring Boot项目、编写Controller处理对话请求以及前端页面展示对话内容。此外,文章还介绍了如何通过添加对话记忆功能,使AI能够理解上下文并进行连贯对话。最后,总结了Spring AI为Java开发者带来的便利,简化了AI应用的开发流程。
201 0
|
18天前
|
XML JSON Java
Spring Boot 开发中常见的错误
本文总结了 Java 开发中常见的几个问题及其改进方法,包括:1. 过度使用 `@Component` 注解;2. `@ResponseBody` 注解的错误用法;3. `@Autowired` 的不当使用;4. `application.properties` 管理不善;5. 异常处理不当。每部分详细解释了错误情况和建议的改进方案,并提供了相应的代码示例。
47 11
|
19天前
|
IDE Java 测试技术
互联网应用主流框架整合之Spring Boot开发
通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
36 5
|
17天前
|
前端开发 Java 开发者
这款免费 IDEA 插件让你开发 Spring 程序更简单
Feign-Helper 是一款支持 Spring 框架的 IDEA 免费插件,提供 URL 快速搜索、Spring Web Controller 路径一键复制及 Feign 与 Controller 接口互相导航等功能,极大提升了开发效率。
|
1月前
|
XML Java 数据格式
Spring Core核心类库的功能与应用实践分析
【12月更文挑战第1天】大家好,今天我们来聊聊Spring Core这个强大的核心类库。Spring Core作为Spring框架的基础,提供了控制反转(IOC)和依赖注入(DI)等核心功能,以及企业级功能,如JNDI和定时任务等。通过本文,我们将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring Core,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
56 14
|
2月前
|
前端开发 JavaScript Java
如何使用 Spring Boot 和 Angular 开发全栈应用程序:全面指南
如何使用 Spring Boot 和 Angular 开发全栈应用程序:全面指南
47 1
|
23天前
|
XML Java 数据格式
Spring Boot 开发中的常见失误
本文深入分析了Spring Boot开发中常见的失误,包括不当使用@Component、@ResponseBody、@Autowired注解,以及不良的异常处理和日志记录实践,提供了有效的规避策略,帮助开发者提升代码质量和系统性能。
|
2月前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
52 2
|
3月前
|
XML Java 数据格式
提升效率!Spring Boot 开发中的常见失误轻松规避
本文深入探讨了在 Spring Boot 开发中常见的失误,包括不当使用注解、不良异常处理、低效日志记录等,提供了有效的规避策略,帮助开发者提升代码质量和系统性能,构建更健壮、高效的应用程序。