企业网站建设总结报告,网络营销推广技术,wordpress全屏幻灯,淮安涟水网站建设目录
一#xff1a;Spring的入门程序
1. Spring的下载
2. Spring的jar文件
3. 第一个Spring程序
4. 第一个Spring程序详细剖析
5. Spring6启用Log4j2日志框架 一#xff1a;Spring的入门程序
1. Spring的下载
官网地址#xff1a;https://spring.io/ 官网地址…目录
一Spring的入门程序
1. Spring的下载
2. Spring的jar文件
3. 第一个Spring程序
4. 第一个Spring程序详细剖析
5. Spring6启用Log4j2日志框架 一Spring的入门程序
1. Spring的下载
官网地址https://spring.io/ 官网地址中文Spring 中文网 官网 打开Spring官网后可以看到Spring Framework以及通过Spring Framework衍生的其它框架 我们即将要学习的就是Spring Framework怎么下载呢
第一步进入github 第二步找到下图位置点击超链接 第三步找到下图位置点击仓库地址的超链接 第四步按照下图步骤操作找到springframwork 第五步继续在springframework目录下找下图的spring点开之后你会看到很多不同的版本 第六步选择对应的版本 第七步点击上图的url 点击spring-5.3.9-dist.zip下载spring框架将下载的zip包解压看到几个文件夹 docsspring框架的API帮助文档 libsspring框架的jar文件用spring框架就是用这些jar包 schemaspring框架的XML配置文件相关的约束文件 2. Spring的jar文件
打开libs目录会看到很多jar包以核心jar包为例 spring-core-5.3.9.jar字节码这个是支撑程序运行的jar包 spring-core-5.3.9-javadoc.jar代码中的注释 spring-core-5.3.9-sources.jar源码 其它所有的jar包当然这些jar包也对应这jar文件这里就不列出来了 spring-aop-5.3.9.jar 这个jar 文件包含在应用中使用Spring 的AOP 特性时所需的类 spring-aspects-5.3.9.jar 提供对AspectJ的支持以便可以方便的将面向切面的功能集成进IDE中 spring-beans-5.3.9.jar 这个jar 文件是所有应用都要用到的它包含访问配置文件、创建和管理bean 以及进行Inversion ofControl / Dependency InjectionIoC/DI操作相关的所有类。如果应用只需基本的IoC/DI 支持引入spring-core.jar 及spring-beans.jar 文件就可以了。 spring-context-5.3.9.jar 这个jar 文件为Spring 核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类JDNI 所需的全部类instrumentation组件以及校验Validation 方面的相关类。 spring-context-indexer-5.3.9.jar 虽然类路径扫描非常快但是Spring内部存在大量的类添加此依赖可以通过在编译时创建候选对象的静态列表来提高大型应用程序的启动性能。 spring-context-support-5.3.9.jar 用来提供Spring上下文的一些扩展模块,例如实现邮件服务、视图解析、缓存、定时任务调度等 spring-core-5.3.9.jar Spring 框架基本的核心工具类。Spring 其它组件要都要使用到这个包里的类是其它组件的基本核心当然你也可以在自己的应用系统中使用这些工具类。 spring-expression-5.3.9.jar Spring表达式语言。 spring-instrument-5.3.9.jar Spring3.0对服务器的代理接口。 spring-jcl-5.3.9.jar Spring的日志模块。JCL全称为Jakarta Commons Logging也可称为Apache Commons Logging。 spring-jdbc-5.3.9.jar Spring对JDBC的支持。 spring-jms-5.3.9.jar 这个jar包提供了对JMS 1.0.2/1.1的支持类。JMS是Java消息服务。属于JavaEE规范之一。 spring-messaging-5.3.9.jar 为集成messaging api和消息协议提供支持 spring-orm-5.3.9.jar Spring集成ORM框架的支持比如集成hibernatemybatis等。 spring-oxm-5.3.9.jar 为主流O/X Mapping组件提供了统一层抽象和封装OXM是Object Xml Mapping。对象和XML之间的相互转换。 spring-r2dbc-5.3.9.jar Reactive Relational Database Connectivity (关系型数据库的响应式连接) 的缩写。这个jar文件是Spring对r2dbc的支持。 spring-test-5.3.9.jar 对Junit等测试框架的简单封装。 spring-tx-5.3.9.jar 为JDBC、Hibernate、JDO、JPA、Beans等提供的一致的声明式和编程式事务管理支持。 spring-web-5.3.9.jar Spring集成MVC框架的支持比如集成Struts等。 spring-webflux-5.3.9.jar WebFlux是 Spring5 添加的新模块用于 web 的开发功能和 SpringMVC 类似的Webflux 使用当前一种比较流程响应式编程出现的框架。 spring-webmvc-5.3.9.jar SpringMVC框架的类库 spring-websocket-5.3.9.jar Spring集成WebSocket框架时使用
注意如果只是想用Spring的IoC功能仅需要引入spring-context即可将这个jar包添加到classpath当中。如果采用maven只需要引入context的依赖即可 现在我们学习的是Spring6但是并没有Spring6只发布了里程碑版并没有jar包当然使用maven做项目管理也不需要下载jar包需要引入依赖并且引入依赖的同时也要引入仓库地址因为还没有正式发布需要内部的仓库地址 注其实spring-context会依赖core和bean的jar包等但是我们使用maven就只需引入context的jar包即可其它依赖的会自动导入 !--Spring6的正式版发布之前这个仓库地址是需要的--
repositoriesrepositoryidrepository.spring.milestone/idnameSpring Milestone Repository/nameurlhttps://repo.spring.io/milestone/url/repository
/repositoriesdependencies!--spring context依赖使用的是6.0.0-M2里程碑版--dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion6.0.0-M2/version/dependency
/dependencies 3. 第一个Spring程序
前期准备
①打开IDEA创建Empty Projectspring6 ②设置JDK版本17编译器版本17 ③设置IDEA的Maven关联自己的maven ④在空的工程spring6中创建第一个模块spring6-001-first 第一步添加spring context的依赖和单元测试junit依赖pom.xml配置如下
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.bjpowernode/groupIdartifactIdspring6-001-first/artifactIdversion1.0-SNAPSHOT/versionpackagingjar/packaging!--配置多个仓库--repositories!--spring6里程碑的仓库--repositoryidrepository.spring.milestone/idnameSpring Milestone Repository/nameurlhttps://repo.spring.io/milestone/url/repository/repositoriesdependencies!--spring context依赖--dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion6.0.0-M2/version/dependency!--单元测试依赖--dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/version/dependency/dependenciespropertiesmaven.compiler.source17/maven.compiler.sourcemaven.compiler.target17/maven.compiler.target/properties
/project 注意打包方式jar 当加入spring context的依赖之后会关联引入其他依赖 ①spring aop面向切面编程 ②spring beansIoC核心 ③spring corespring的核心工具包 ④spring jclspring的日志包 ⑤spring expressionspring表达式 第二步定义beanUser默认会调用无参构造方法
package com.bjpowernode.spring6.bean;
// 这是一个Bean封装了用户的信息。Spring可以帮助我们创建User对象吗
public class User {}第三步编写spring的配置文件spring.xml名字随意该文件放在类的根路径下便于移植。下图是使用IDEA工具自带的spring配置文件的模板进行创建。 此时就需要在配置文件中进行bean的配置bean的id和class属性 id属性代表对象的唯一标识。 class属性用来指定要创建的java对象的类名这个类名必须是全限定类名带包名。 ?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd!--配置bean这样spring才能帮助我们管理这个对象--bean iduserBean classcom.bjpowernode.spring6.bean.User /
/beans
第四步编写测试程序 ①先创建ClassPathXmlApplicationContext对象参数是spring配置文件的路径返回的是ApplicationContext 翻译为应用上下文其实就是Spring容器。解释ApplicationContext 就是一个接口接口下有很多实现类其中有一个实现类叫做ClassPathXmlApplicationContext是专门从类路径当中加载spring配置文件的一个Spring上下文对象。 ②创建好ClassPathXmlApplicationContext对象就可以调用getBean方法参数是spring.xml配置文件当中的id这样就可以根据bean的id从Spring容器中获取这个对象 package com.bjpowernode.spring6.test;import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class FirstSpringTest {Testpublic void testFirstSpringTest(){// 第一步获取Spring容器对象// 这行代码只要执行就相当于启动了Spring容器解析spring.xml文件并且实例化所有的bean对象放到spring容器当中ClassPathXmlApplicationContext applicationContext new ClassPathXmlApplicationContext(spring.xml);// 第二步根据bean的id从Spring容器中获取这个对象Object userBean applicationContext.getBean(userBean);System.out.println(userBean);}
}第五步运行测试程序验证Spring容器确实可以帮我们创建对象 4. 第一个Spring程序详细剖析
1bean标签的id属性可以重复吗
Vip.java
package com.powernode.spring6.bean;public class Vip {
}spring.xml
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdbean iduserBean classcom.powernode.spring6.bean.User/bean iduserBean classcom.powernode.spring6.bean.Vip/
/beans
运行测试程序 通过测试得出在spring的配置文件中id是不能重名
2底层是怎么创建对象的 User.java在User类中添加上无参数构造方法
package com.powernode.spring6.bean;public class User {public User() {System.out.println(User的无参数构造方法执行);}
}运行测试程序 通过测试得知创建对象时确实调用了无参数构造方法并且是通过反射机制调用无参数构造方法。
如果提供一个有参数构造方法不提供无参数构造方法会怎样呢
package com.powernode.spring6.bean;public class User {public User(String name){System.out.println(User的有参数构造方法执行);}
}运行测试程序 通过测试得知spring是通过调用类的无参数构造方法来创建对象的所以要想让spring给你创建对象必须保证无参数构造方法是存在的。
Spring是如何创建对象的呢原理是什么 先通过dom4j解析spring.xml文件从中获取class的全限定类名然后通过反射机制调用无参数构造方法创建对象 Class clazz Class.forName(com.powernode.spring6.bean.User);
Object obj clazz.newInstance();
3把创建好的对象存储到一个什么样的数据结构当中了呢 存到一个Map集合Map的key就是idvalue就是创建的对象 4spring配置文件的名字必须叫做spring.xml吗 ①这个spring配置文件名字是我们负责提供的显然spring配置文件的名字是随意的。 ②并且这个配置文件不一定就放在跟目录下也可以先创建xml目录然后把配置文件放到这个目录下也可以 ClassPathXmlApplicationContext applicationContext new ClassPathXmlApplicationContext(xml/beans.xml);
5像这样的beans.xml文件可以有多个吗
再创建一个spring配置文件起名beans.xml放到xml目录下
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdbean idvipBean classcom.bjpowernode.spring6.bean.Vip /
/beans
编写测试
package com.bjpowernode.spring6.test;import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class FirstSpringTest {Testpublic void testFirstSpringTest(){// 第一步获取Spring容器对象// 这行代码只要执行就相当于启动了Spring容器解析spring.xml文件并且实例化所有的bean对象放到spring容器当中ClassPathXmlApplicationContext applicationContext new ClassPathXmlApplicationContext(spring.xml,xml/beans.xml);// 第二步根据bean的id从Spring容器中获取这个对象Object userBean applicationContext.getBean(userBean);System.out.println(userBean);Object vipBean applicationContext.getBean(vipBean);System.out.println(vipBean);}
}运行测试程序 通过测试得知spring的配置文件可以有多个在ClassPathXmlApplicationContext构造方法的参数上传递文件路径即可这是为什么呢通过源码可以看到参数是一个可变长度参数 6在配置文件中配置的类必须是自定义的吗可以使用JDK中的类吗例如java.util.Date
spring.xml中增加配置
bean iddateBean classjava.util.Date/
编写测试
package com.bjpowernode.spring6.test;import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class FirstSpringTest {Testpublic void testFirstSpringTest(){// 第一步获取Spring容器对象// 这行代码只要执行就相当于启动了Spring容器解析spring.xml文件并且实例化所有的bean对象放到spring容器当中ClassPathXmlApplicationContext applicationContext new ClassPathXmlApplicationContext(spring.xml,xml/beans.xml);// 第二步根据bean的id从Spring容器中获取这个对象Object userBean applicationContext.getBean(userBean);System.out.println(userBean);Object vipBean applicationContext.getBean(vipBean);System.out.println(vipBean);// 使用JDK中的类Object bean applicationContext.getBean(dateBean);System.out.println(bean);}
}运行测试程序当然是可以的 7getBean()方法调用时如果指定的id不存在会怎样 运行测试程序 通过测试得知当id不存在的时候会出现异常而不是返回null 8getBean()方法返回的类型是Object如果访问子类的特有属性和方法时还需要向下转型有其它办法可以解决这个问题吗
对获取的时间进行格式化
spring.xml配置
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd!--配置bean这样spring才能帮助我们管理这个对象--bean iddateBean classjava.util.Date /
/beans
编写测试 第一种方法直接进行强制类型转换。 第二种方法多传一个参数这个参数指定要转换的类型例如要转换成Date类型就是Date.class。 package com.bjpowernode.spring6.test;import com.bjpowernode.spring6.bean.User;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;import java.text.SimpleDateFormat;
import java.util.Date;public class FirstSpringTest {Testpublic void testFirstSpringTest(){ClassPathXmlApplicationContext applicationContext new ClassPathXmlApplicationContext(spring.xml);// -------------第一种方法// 返回的是一个Object类型Object dateBean applicationContext.getBean(dateBean);SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd);// 这个里面要传Date需要强转Date date (Date) dateBean;String nowDate sdf.format(date);System.out.println(nowDate);// -------------第二种方法Date dateBean1 applicationContext.getBean(dateBean, Date.class);String nowDate1 sdf.format(dateBean1);System.out.println(nowDate1);}
}执行结果 9ClassPathXmlApplicationContext是从类路径中加载配置文件如果没有在类路径当中又应该如何加载配置文件呢
例如在d盘下的spring.xml怎样去加载 调用的方法都不同了调用的是FileSystemXmlApplicationContext方法并把文件的绝对路径传过去 User.java
package com.bjpowernode.spring6.bean;public class User {public void doSome(){System.out.println(doSome方法执行了);}
}spring.xml
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd!--配置bean这样spring才能帮助我们管理这个对象--bean iduserBean classcom.bjpowernode.spring6.bean.User /bean iddateBean classjava.util.Date /
/beans
编写测试
package com.bjpowernode.spring6.test;import com.bjpowernode.spring6.bean.User;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;import java.text.SimpleDateFormat;
import java.util.Date;public class FirstSpringTest {Testpublic void testFirstSpringTest(){FileSystemXmlApplicationContext applicationContext new FileSystemXmlApplicationContext(D:\\spring.xml);User user applicationContext.getBean(userBean, User.class);user.doSome();}
}运行结果也能正常的加载创建对象 10ApplicationContext的超级父接口BeanFactory ①ApplicationContext接口的一个超级父接口是BeanFactory翻译为Bean工厂就是能够生产Bean对象的一个工厂对象。 ②BeanFactory是IoC容器的顶级接口 ③实际上Spring的IoC容器底层实际上使用了工厂模式。 ④Spring底层的IoC是怎么实现的XML解析 工厂模式 反射机制 11何时创建对象
User.java
package com.bjpowernode.spring6.bean;public class User {public User() {System.out.println(User的无参数构造方法执行。);}
}spring.xml
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd!--配置bean这样spring才能帮助我们管理这个对象--bean iduserBean classcom.bjpowernode.spring6.bean.User /
/beans
编写测试
package com.bjpowernode.spring6.test;import com.bjpowernode.spring6.bean.User;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;import java.text.SimpleDateFormat;
import java.util.Date;public class FirstSpringTest {Testpublic void testFirstSpringTest(){// 此时就把对象已经创建出来了new ClassPathXmlApplicationContext(spring.xml);}
}执行结果 ①实际上在执行new ClassPathXmlApplicationContext(spring.xml);时对象就创建出来了。 ②调用getBean方法只是从集合当中把数据取出来 5. Spring6启用Log4j2日志框架 从Spring5之后Spring框架支持集成的日志框架是Log4j2如何启用日志框架 第一步在pom.xml中引入Log4j2的依赖
!--log4j2的依赖--
dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-core/artifactIdversion2.19.0/version
/dependency
dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-slf4j2-impl/artifactIdversion2.19.0/version
/dependency
第二步 在类的根路径下提供log4j2.xml配置文件
注文件名固定为log4j2.xml文件必须放到类根路径下
?xml version1.0 encodingUTF-8?configurationloggers!--level指定日志级别从低到高的优先级ALL TRACE DEBUG INFO WARN ERROR FATAL OFF--root levelDEBUGappender-ref refspring6log//root/loggersappenders!--输出日志信息到控制台--console namespring6log targetSYSTEM_OUT!--控制日志输出的格式--PatternLayout pattern%d{yyyy-MM-dd HH:mm:ss SSS} [%t] %-3level %logger{1024} - %msg%n//console/appenders/configuration
第三步使用日志框架 ①第一步调用LoggerFactory的getLogger方法返回日志记录器对象参数是某个具体的类例如获取FirstSpringTest类的日志记录器对象参数就是FirstSpringTest.class也就是说只要是FirstSpringTest类中的代码执行记录日志的话就输出相关的日志信息。 ②第二步记录日志根据不同的调用级别来输出日志。 package com.bjpowernode.spring6.test;import com.bjpowernode.spring6.bean.User;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;import java.text.SimpleDateFormat;
import java.util.Date;public class FirstSpringTest {Testpublic void testFirstSpringTest(){new ClassPathXmlApplicationContext(spring.xml);// 第一步创建日志记录器对象Logger logger LoggerFactory.getLogger(FirstSpringTest.class);// 第二步记录日志根据不同的级别来输出日志logger.info(我是一条消息);logger.debug(我是一条调试信息);logger.error(我是一条错误信息);}
}执行结果 前面我们设置的级别是 DEBUG 级别比info和error级别都低级别越高输出的信息越少级别越低输出的信息越多所以这三条日志都会输出