https://www.myziyuan.com/
- 世源网络科技
- 您好,希望以下回答能帮助您《SPRING技术内幕——深入解析SPRING架构与设计原理》该书讲了spring的ioc容器原理,在xml的spring配置文件中,对象是如何解析并生成的。spring的aop,面向切面编程。这两块是比较重要的,属于核心部分。其他的如spring mvc ,spring jdbc与hibernate,ibatise集成,spring事务,spring security,spring 任务调度都有介绍。大体来说,属于跟着代码走向,一个类一个类介绍了一下。其实代码都是有英文注释的。跟着作都的思路看过来也还是可以的,最好是对照类图分析。如您还有疑问可继续追问。
- 2021-02-18 13:00:01
- aa
- 想请教一下有对Spring源代码有兴趣,而且是已经深入理解的高手,大侠们。我曾经多次对Spring源代码进行阅读,都没有收到什么效果,发现太难入手了,我存在的问题就是,无法掌握它的脉络,类的依赖关系太过复杂,感觉每个类都要去阅读。所以这样我掉入了深渊。就很难坚持下去了,而且看了也等于没看一样,我看的目的就是想学习高手在写代码的思想。巧妙之处,以至为我自己所用!能多给点意见。。谢谢啦.问题补充:补充一点就是,我使用Spring已经有几年了,只是想去认真阅读他的实现原理,和学习优秀的设计。 问题补充:kisa1022 写道最好能参与项目,实践多了自然能有所领悟。阅读代码为主,一般提高的速度很慢的。你可以看好的代码,理解代码中的思想,然后一定要把获取的思想进行实践。谢谢你的回复,我其实用Spring做过好几个项目,只是没有去学习他的内在的实现。我现在就是想提高自己的编码水平。学习大师级别的人如何设计。
- 2021-02-11 15:20:38
- 你大爷
- 如何查看spring源码,1.准备工作:在官网上下载了Spring源代码之后,导入Eclipse,以方便查询。2.打开我们使用Spring的项目工程,找到Web.xml这个网站系统配置文件,在其中找到Spring的初始化信息:org.springframework.web.context.ContextLoaderListener由配置信息可知,我们开始的入口就这里ContextLoaderListener这个监听器。在源代码中我们找到了这个类,它的定义是:public class ContextLoaderListener extends ContextLoaderimplements ServletContextListener {…/*** Initialize the root web application context.*/public void contextInitialized(ServletContextEvent event) {this.contextLoader = createContextLoader();if (this.contextLoader == null) {this.contextLoader = this;}this.contextLoader.initWebApplicationContext(event.getServletContext());}...}该类继续了ContextLoader并实现了监听器,关于Spring的信息载入配置、初始化便是从这里开始了,具体其他阅读另外写文章来深入了解。二、关于IOC和AOP关于Spring IOC 网上很多相关的文章可以阅读,那么我们从中了解到的知识点是什么?1)IOC容器和AOP切面依赖注入是Spring是核心。IOC容器为开发者管理对象之间的依赖关系提供了便利和基础服务,其中Bean工厂(BeanFactory)和上下文(ApplicationContext)就是IOC的表现形式。BeanFactory是个接口类,只是对容器提供的最基本服务提供了定义,而DefaultListTableBeanFactory、XmlBeanFactory、ApplicationContext等都是具体的实现。接口:public interface BeanFactory {//这里是对工厂Bean的转义定义,因为如果使用bean的名字检索IOC容器得到的对象是工厂Bean生成的对象,//如果需要得到工厂Bean本身,需要使用转义的名字来向IOC容器检索String FACTORY_BEAN_PREFIX = "&";//这里根据bean的名字,在IOC容器中得到bean实例,这个IOC容器就象一个大的抽象工厂,用户可以根据名字得到需要的bean//在Spring中,Bean和普通的JAVA对象不同在于://Bean已经包含了我们在Bean定义信息中的依赖关系的处理,同时Bean是已经被放到IOC容器中进行管理了,有它自己的生命周期Object getBean(String name) throws BeansException;//这里根据bean的名字和Class类型来得到bean实例,和上面的方法不同在于它会抛出异常:如果根名字取得的bean实例的Class类型和需要的不同的话。Object getBean(String name, Class requiredType) throws BeansException;//这里提供对bean的检索,看看是否在IOC容器有这个名字的beanboolean containsBean(String name);//这里根据bean名字得到bean实例,并同时判断这个bean是不是单件,在配置的时候,默认的Bean被配置成单件形式,如果不需要单件形式,需要用户在Bean定义信息中标注出来,这样IOC容器在每次接受到用户的getBean要求的时候,会生成一个新的Bean返回给客户使用 - 这就是Prototype形式boolean isSingleton(String name) throws NoSuchBeanDefinitionException;//这里对得到bean实例的Class类型Class getType(String name) throws NoSuchBeanDefinitionException;//这里得到bean的别名,如果根据别名检索,那么其原名也会被检索出来String[] getAliases(String name);}实现:XmlBeanFactory的实现是这样的:public class XmlBeanFactory extends DefaultListableBeanFactory {//这里为容器定义了一个默认使用的bean定义读取器,在Spring的使用中,Bean定义信息的读取是容器初始化的一部分,但是在实现上是和容器的注册以及依赖的注入是分开的,这样可以使用灵活的 bean定义读取机制。private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);//这里需要一个Resource类型的Bean定义信息,实际上的定位过程是由Resource的构建过程来完成的。public XmlBeanFactory(Resource resource) throws BeansException {this(resource, null);}//在初始化函数中使用读取器来对资源进行读取,得到bean定义信息。这里完成整个IOC容器对Bean定义信息的载入和注册过程public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throwsBeansException {super(parentBeanFactory);this.reader.loadBeanDefinitions(resource);}
- 2021-02-11 15:20:38