Spring学习思路和环境准备,准备入门的同学一定要来看看

我的学习思路

  • 装配方式 + 依赖注入
  • 设计理念
  • BeanDefintion scope beanClass lazy-init method constructor
  • BeanDefintionMap 注册 BeanFactoryRegistry
  • 注解如何解析,如何注册 BeanFactoryPostProcessor
  • beanFactory.getBean("user") singletonObject 单例对象池
  • bean的构建过程 new--属性填充--init
  • bean的循环依赖
  • beanPostPrecessor后置处理器的9次调用
  • AOP init的后置方法里调用的后置处理器
  • 声明式事务 MethodInterceptor
  • WEB DispatherServlet#doDispath
  • Spring扩展点 --IOC的扩展点:
    • BeanFactoryPostProcessor
    • beanPostPrecessor
    • @Import
    • ApplicationListener
    • SmartLiftCycle

这个是我准备的Spring的学习计划,当然也是老师给我的,Spring的源码我准备了一个多月了,还有挺多细节的东西还是无法掌握,但是大致的点都能够懂,总体上有个大致的框架思路。

环境准备

  • Spring Framework5.2
  • JDK1.8
  • IDEA2019.1.3
  • Maven3.6
  • Gradle4.10.2

整一套Sping的环境基础搭建就这几个,这些环境搭建细节就不一一说明,自行百度。具体构建Sping的环境可以留意我的上期的博客,期间的构建问题会出现很多不一样的问题,遇到问题可以留言,能解决的话可以帮你看看。

整体的环境

图片为gradle环境搭建成功,左侧会出现小蓝色的图标,右侧的模块会展示出现gradle图标。

新建learn-ioc5的模块

learn-ioc5的模块的用于后面Debug的测试模块,下面是搭建过程:

File->New->Module

Gradle->ModuleSDK->Java->Next

选择新建的模块为gradle,SDK就是本地的Java环境(前提是idea安装了gradle和jdk)

New Module

点击模块的继承

输入ArtifactId为learn-ioc5

等待完成构建,大约需要3到4分钟。会构建成功出现一个空的module。

创建完成后打开build.gradle, 引入依赖jar

compile(project(":spring-context"))

plugins {
    id 'java'
}

group 'org.springframework'
version '5.2.0.BUILD-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile(project(":spring-context"))
}

在src->main->java下新建好对应的包,目前我们用到的几个:

com.xuchang.bean

package com.xuchang.bean;


public class Fox {

}
package com.xuchang.bean;


public class Cat {

	public  Cat(){
		System.out.println("new Cat()");
	}
}

com.xuchang.config

package com.xuchang.config;


import com.xuchang.bean.Fox;
import com.xuchang.bean.MyImportBeanDefinitionRegistrar;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;


@Configuration
@Import(MyImportBeanDefinitionRegistrar.class)
@ComponentScan("com.xuchang")
public class AppConfig {

	// method bean   method.invoke
	@Bean
	public Fox fox(){
		return new Fox();
	}
}

·
MyImportBeanDefinitionRegistrar是我定义的BeanDefinition的注册器,未使用到的话可以去掉。

src->main->test->java


import com.xuchang.bean.Cat;
import com.xuchang.config.AppConfig;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;


public class IOCTest {

	@Test
	public void test(){

		// ioc容器
		ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

		//NoSuchBeanDefinitionException
		// BeanDefinition   bean定义  承载bean的属性   init-method  scope
		// BeanDefinitionRegistry 注册器
		// registerBeanDefinition(String beanName, BeanDefinition beanDefinition)
		// BeanDefinitionMap    key(beanName)  value: BeanDefinition(Fox.class)
		// beanFactoryPostProcessor
		BeanFactory beanFactory = ((AnnotationConfigApplicationContext) context).getDefaultListableBeanFactory();
		// 注册 Cat.class 的beanDefinition
		// 实现了 BeanDefinitionRegistry   BeanFactory
		BeanDefinition beanDefinition = new RootBeanDefinition(Cat.class);
		((DefaultListableBeanFactory) beanFactory).registerBeanDefinition("cat",beanDefinition);

		// singletonObjects   map 缓存单例bean  beanName---singletonObject
		Cat cat = new Cat();
		((DefaultListableBeanFactory) beanFactory).registerSingleton("cat",cat);

		System.out.println(context.getBean("fox"));

	}

}

总结

基本的环境和大致的流程都已经实现,运行测试类没有报错基本上Spring的环境已经准备好了。

后面留意:装配方式 + 依赖注入和设计理念

全部评论

相关推荐

头像
10-22 20:13
中南大学 Java
序言大家好呀。我是希晨er,一个初入职场的程序猿小登最近上班摸鱼刷到了一篇文章:10年深漂,放弃高薪,回长沙一年有感,还有聊聊30岁大龄程序员过往的心路历程,突然就有点感慨。我如今也做出了和大明哥一样的抉择,只是更早。此外我22年的人生,好像从来没好好记录过。正好现在工作不太忙,就想把这些经历写下来,也希望能得到社区里各位前辈的指点个人背景我是03年出生的西安娃,父母都是普通打工人。刚从中南大学软件工程专业毕业半年,现在在老家的央企过着躺平摆烂的日子成长轨迹从农村到城市的童年我家并不是西安的,只是爸妈在西安上班,从小学之后就把我接到了西安。后来老家房子拆了,爷爷奶奶也搬了过来。农村的生活,我觉...
Yki_:看哭了,恋爱那一段你女朋友说你不够关心她,可你毕竟也愿意遇到矛盾写几千字来和她慢慢分析;说不愿意给她花钱,我感觉可能只是消费观不一样;如果她想留在长沙,也应该提前跟你说开。不过她也许会心疼你放弃大厂offer转向数字马力?我也因为同样的原因有过一段幸福而充满遗憾的感情,不过跟爱情相比确实前途更重要一点。至于offer的选择,换我我也会这么选。把这些旧事记录下来以后,接下来就好好向前看吧,加油兄弟
🍊晨光随笔
点赞 评论 收藏
分享
10-16 15:48
算法工程师
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务