Spring5學(xué)習(xí)之基礎(chǔ)知識(shí)總結(jié)
1、Spring 是輕量級(jí)的開(kāi)源的 JavaEE 框架
2、 Spring 可以解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性
3、Spring 有兩個(gè)核心部分:IOC 和 Aop
IOC:控制反轉(zhuǎn),把創(chuàng)建對(duì)象過(guò)程交給 Spring 進(jìn)行管理Aop:面向切面,不修改源代碼進(jìn)行功能增強(qiáng)4、Spring 特點(diǎn)
方便解耦,簡(jiǎn)化開(kāi)發(fā)Aop 編程支持方便程序測(cè)試方便和其他框架進(jìn)行整合方便進(jìn)行事務(wù)操作降低 API 開(kāi)發(fā)難度 2.入門(mén)Demo1.jar包引入
<project xmlns='http://maven.apache.org/POM/4.0.0' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd'> <modelVersion>4.0.0</modelVersion> <groupId>cn.zj.springDemo</groupId> <artifactId>springDemo</artifactId> <version>0.0.1-SNAPSHOT</version> <description>spring的入門(mén)demo</description> <dependencies><dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.6</version></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.3.6</version></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.6</version></dependency> </dependencies></project>
2.bean
package cn.zj.demo.bean;public class User { public void add() {System.out.println('add....'); } }
3.spring的xml配置
<?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'> <!--1 配置User對(duì)象創(chuàng)建--> <bean class='cn.zj.demo.bean.User'></bean> </beans>
4.測(cè)試代碼
package cn.zj.demo.test;import org.junit.jupiter.api.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.zj.demo.bean.User;public class SpringTest { @Test public void testAdd() {// 1 加載 spring 配置文件ApplicationContext context = new ClassPathXmlApplicationContext('bean1.xml');// 2 獲取配置創(chuàng)建的對(duì)象User user = context.getBean('user', User.class);System.out.println(user);user.add(); }}
5.輸出
cn.zj.demo.bean.User@24111ef1add....3.源碼
ApplicationContext context = new ClassPathXmlApplicationContext('bean1.xml');public ClassPathXmlApplicationContext( String[] configLocations, boolean refresh, @Nullable ApplicationContext parent) throws BeansException {super(parent);setConfigLocations(configLocations);if (refresh) { refresh();} }
public void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) { StartupStep contextRefresh = this.applicationStartup.start('spring.context.refresh'); //容器刷新前的準(zhǔn)備,設(shè)置上下文狀態(tài),獲取屬性,驗(yàn)證必要的屬性等 prepareRefresh(); //獲取新的beanFactory,銷(xiāo)毀原有beanFactory、為每個(gè)bean生成BeanDefinition等 ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); // Prepare the bean factory for use in this context. prepareBeanFactory(beanFactory); try { //配置標(biāo)準(zhǔn)的beanFactory,設(shè)置ClassLoader,設(shè)置SpEL表達(dá)式解析器,添加忽略注入的接口,添加bean,添加bean后置處理器等postProcessBeanFactory(beanFactory);// 實(shí)例化并調(diào)用所有注冊(cè)的beanFactory后置處理器(實(shí)現(xiàn)接口BeanFactoryPostProcessor的bean,在beanFactory標(biāo)準(zhǔn)初始化之后執(zhí)行)。StartupStep beanPostProcess = this.applicationStartup.start('spring.context.beans.post-process');// Invoke factory processors registered as beans in the context.invokeBeanFactoryPostProcessors(beanFactory);//實(shí)例化和注冊(cè)beanFactory中擴(kuò)展了BeanPostProcessor的bean。registerBeanPostProcessors(beanFactory);beanPostProcess.end(); //初始化國(guó)際化工具類(lèi)MessageSourceinitMessageSource(); //初始化事件廣播器initApplicationEventMulticaster(); //模板方法,在容器刷新的時(shí)候可以自定義邏輯,不同的Spring容器做不同的事情。onRefresh(); //注冊(cè)監(jiān)聽(tīng)器,廣播early application eventsregisterListeners(); //實(shí)例化所有剩余的(非懶加載)單例//實(shí)例化的過(guò)程各種BeanPostProcessor開(kāi)始起作用。finishBeanFactoryInitialization(beanFactory); //refresh做完之后需要做的其他事情。//清除上下文資源緩存(如掃描中的ASM元數(shù)據(jù))//初始化上下文的生命周期處理器,并刷新(找出Spring容器中實(shí)現(xiàn)了Lifecycle接口的bean并執(zhí)行start()方法)。//發(fā)布ContextRefreshedEvent事件告知對(duì)應(yīng)的ApplicationListener進(jìn)行響應(yīng)的操作finishRefresh(); } catch (BeansException ex) {if (logger.isWarnEnabled()) { logger.warn('Exception encountered during context initialization - ' + 'cancelling refresh attempt: ' + ex);}// Destroy already created singletons to avoid dangling resources.destroyBeans();// Reset ’active’ flag.cancelRefresh(ex);// Propagate exception to caller.throw ex; } finally {// Reset common introspection caches in Spring’s core, since we// might not ever need metadata for singleton beans anymore...resetCommonCaches();contextRefresh.end(); }} }
三級(jí)緩存
到此這篇關(guān)于Spring5學(xué)習(xí)之基礎(chǔ)知識(shí)總結(jié)的文章就介紹到這了,更多相關(guān)Spring5知識(shí)總結(jié)內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. .Net Core和RabbitMQ限制循環(huán)消費(fèi)的方法2. jsp網(wǎng)頁(yè)實(shí)現(xiàn)貪吃蛇小游戲3. asp(vbs)Rs.Open和Conn.Execute的詳解和區(qū)別及&H0001的說(shuō)明4. ASP.NET MVC遍歷驗(yàn)證ModelState的錯(cuò)誤信息5. 用css截取字符的幾種方法詳解(css排版隱藏溢出文本)6. ASP 信息提示函數(shù)并作返回或者轉(zhuǎn)向7. asp中response.write("中文")或者js中文亂碼問(wèn)題8. PHP設(shè)計(jì)模式中工廠模式深入詳解9. CSS hack用法案例詳解10. 將properties文件的配置設(shè)置為整個(gè)Web應(yīng)用的全局變量實(shí)現(xiàn)方法
