Spring框架开发流程

2023-05-16

Spring框架是什么?

Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。

在这里插入图片描述

Spring框架的开发流程

1.在pom.xml中引入spring的依赖

<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.3.9</version>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.20</version>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.32</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.32</version>
		</dependency>
	</dependencies>

2.定义spring中管理的内容,配置文件applicationContext.xml

  • < bean>
    • id/name:唯一名称
    • class: 类全名
    • init-method: 对象创建后第一个调用的对象方法
    • destroy-method:容器销毁对象时调用的方法
    • lazy-init: 懒加载
      • true: 对象在使用时才创建对象
      • false: spring容器创建并解析创建组件(默认)
  • < property>: 对象的属性(set 方法)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


	<bean id="myBook" class="com.dyit.spring.entity.Book">
		<property name="id" value="001" />
		<property name="title" value="西游记" />
		<property name="author" value="吴承恩" />
		<property name="price" value="33.33" />
	</bean>
</beans>

3.创建spring容器

final String CONFIG_LOCATION = "classpath:spring/applicationContext.xml";
//创建spring工厂(容器)
		ApplicationContext factory=
				new FileSystemXmlApplicationContext(CONFIG_LOCATION);

4.读取Bean(组件、对象)

Book book = factory.getBean("myBook", Book.class);

5.运行

2021-08-12 02:37:04 [main] 0ms (DEBUG) [org.springframework.context.support.FileSystemXmlApplicationContext] -org.springframework.context.support.AbstractApplicationContext.prepareRefresh(AbstractApplicationContext.java:629)-- {Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@18e8568}
2021-08-12 02:37:05 [main] 582ms (DEBUG) [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] -org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:393)-- {Loaded 1 bean definitions from class path resource [spring/applicationContext.xml]}
2021-08-12 02:37:05 [main] 661ms (DEBUG) [org.springframework.beans.factory.support.DefaultListableBeanFactory] -org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)-- {Creating shared instance of singleton bean 'myBook'}

6.String Bean的创建过程

在这里插入图片描述

在这里插入图片描述
1.用eclipse的debug模式来观察Spring的IOC过程
在这里插入图片描述
在这里插入图片描述
2.构造方法中父类初始化:调用了refresh来刷新ioc容器的初始化。至于那个super(parent),是ioc的一个双亲机制,这个可以传入null,表示这个ioc没有父类。
在这里插入图片描述
3.创建Bean工厂,一行短短的代码触发整个IOC容器的初始化
在这里插入图片描述
4.进入prepareBeanFactory()方法中配置beanFactory的类加载器
在这里插入图片描述
5.进入后置处理器postProcessBeanFactory()
在这里插入图片描述
6.进入invokeBeanFactoryPostProcessors()方法。在上下文中调用注册为bean的工厂处理器
在这里插入图片描述
7.进入registerBeanPostProcessors()方法。

1.整个 registerBeanPostProcessors 方法围绕 BeanPostProcessor 接口展开,和 invokeBeanFactoryPostProcessors 不同的是,invokeBeanFactoryPostProcessors 方法会直接调用 BeanFactoryPostProcessor 实现类的方法,而 registerBeanPostProcessors 方法只是将 BeanPostProcessor 实现类注册到 BeanFactory 的 beanPostProcessors 缓存中。这是因为,此时还未到 BeanPostProcessor 实现类“出场的时候”。
2.BeanPostProcessor 实现类具体的 “出场时机” 在创建 bean 实例时,执行初始化方法前后。postProcessBeforeInitialization 方法在执行初始化方法前被调用,postProcessAfterInitialization 方法在执行初始化方法后被调用。
3.BeanPostProcessor 实现类和 BeanFactoryPostProcessor 实现类一样,也可以通过实现 PriorityOrdered、Ordered 接口来调整自己的优先级。
4.registerBeanPostProcessors 方法和 invokeBeanFactoryPostProcessors 也会触发 bean 实例的创建,创建 Bean 实例是 IoC 的核心内容

在这里插入图片描述
8.进入finishBeanFactoryInitialization()方法 。判断BeanFactory中是否存在名称为“conversionService”且类型为ConversionService的Bean,如果存在则将其注入到beanFactory
在这里插入图片描述

6.注解加载

<context:component-scan base-package="com.dyit.spring.entity"/>
  • @Component 当前类是容器中的组件

    • @Controller -->控制层
    • @Service —》service
    • @Repository—> mapper/dao

​ 含义: 扫描 com.dyit.spring.entity文件夹下的所有类,如果有@Compoent,@Controller,@Service,@Repository注解的类将其创建对象放入容器中备用。

7.使用配置类替代appliationContext.xml

@Configuration
public class HelloConfiguration {
	
	@Bean(name = "b3")
	public Book3 book3() {
		return new Book3();
	}

}
	ApplicationContext factory =new AnnotationConfigApplicationContext("com.dyit.spring.config");
		Book3 b3 =factory.getBean("b3", Book3.class);
		System.out.println(b3);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring框架开发流程 的相关文章

随机推荐