前言
最近荔枝在转技术栈呢,后端Java零零散散也学了半个月,在一边总结blog输出的同时一遍实操项目。最近学完JavaSE部分的重点之后荔枝来入手spring框架,说起spring其实大家耳熟能详的就想起IoC和AOP了,但在这篇文章荔枝主要还是梳理一下一个最简单的spring框架配置流程并把相应需要的环境和踩过的坑给大家分享一下哈哈哈,大家避避雷~
文章目录
前言
一、安装配置环境
二、Spring框架简介
三、入门操作案例
3.1 项目创建
3.2 将对象实例化过程交给spring
3.3 日志框架Log4j2
总结
一、安装配置环境
在正式开始之前我们需要配置好环境,首先需要有一个IDEA,当然使用Eclipse也可以只是可能步骤不太一样了。因为荔枝是从pytyon转技术栈过来的,所以对于pycharm用习惯了,对于同一个公司(JetBrains)出的,所以一开始荔枝就钟情于IDEA的风格了。对于基本的IDEA和JDK配置以及Maven的下载和配置,大家可以看看荔枝的另外两篇文章
步入JAVA——环境搭建与配置https://blog.csdn.net/qq_62706049/article/details/131500175Maven —— 项目管理工具https://blog.csdn.net/qq_62706049/article/details/131500175
大家可能会疑惑哈,为啥没说spring怎么下载和安装呢?其实当初荔枝和绝大多数入门的小伙伴
一样直接在网上找下载教程啥的,但是哈走了一点弯路浪费一天时间~~~
大多数博客是这么写的,首先进入Spring官网:Spring | Home 大家可能需要挂一下梯子上去看看。之后选择Projects——Spring Farmework,然后点击上面的Github图标并选择Access ...中的链接并跳转到如下页面:
跳转至一个Jfrog平台并按照大多数blog提供的方法你会发现找不到文件,荔枝翻了翻发现其实都没必要自己去找,直接输入这个网址就行了:https://repo.spring.io/artifactory/release/org/springframework/spring
然后荔枝除了一些小状况,在url中输入上面的链接并跳转会被重定向到JFrog平台的登录入口,因为刚刚开始接触并不了解所以荔枝就打算直接注册一个账号。值得伤心的是没有找到注册入口,那就继续谷歌搜索解决方案:荔枝找了一会发现可以在JFrog其实有点像一个代码管理仓库,可以用Docker来安装并在本地首次进入可以注册账号,这部就解决啦哈哈哈哈。
然而显示再次打脸,账号是注册好了但显示密码不对或者账户被锁定了。不对劲,荔枝感觉不应该这么麻烦滴,查了一下其实没必要把spring的jar包下载下来,可以在项目中通过配置pom.xml文件来自动导入嘞,一天白干活呜呜呜呜~~~
二、Spring框架简介
Java Spring是一个开源框架,从2003年开始兴起的一个轻量级Java开发框架,直至今天它仍然有着极大的贡献度。Spring是为了解决企业级应用开发的复杂性而创建的,降低了开发的复杂度。Spring框架主要通过以下4种关键策略来降低Java后端开发的复杂性:
- 基于POJO的轻量级和最小侵入性编程;
- 通过IOC(控制反转)、依赖注入(DI)和面向接口编程实现松耦合;
- 基于切面编程(AOP)和惯例进行声明式编程;
- 通过切面和模板减少样式代码。
我们最常说的Spring框架其实指的是Spring Framwork,但Spring最为Java中的顶级项目,还有诸如Spring Cloud、SpringData和SpringBoot等组件,又称为Spring全家桶。基本上现在Java最主流的开发框架就是Spring和它的周边了,Spring的核心则是控制反转IOC和面向切面编程AOP。
Spring体系结构
模块功能详解
- 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
- Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
- Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
- Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
- Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
- Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
- Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
三、入门操作案例
3.1 项目创建
首先打开你的IDEA,这里记得下载专业版的哈,学生通过申请是可以免费使用一年的。一次选择File——New——Projects新建一个工程项目。
在配置那里选择是基于Maven创建的,这非常重要!同时需要配置项目名称和包名,按照自己项目的需求选择对应spring要求的Java JDK版本,这里荔枝选择的是JDK17,之后点击确定就创建好了。
创建好后可以选择创建子项目,这里荔枝是打算练手所以就创建了子项目。也是类似的操作,依次选择New——Module来创建子项目,确定好对应配置即可。
完成之后我们就需要打开项目的工程目录并在src目录下来配置参数,依次打开src——main——resources,选择创建一个xml文件,这里的命名可以随便,这里我命名为bean.xml。
3.2 将对象实例化过程交给spring
我们可以在src——main——java——包名中右键创建一个User类,并将该对象的实例化托管给spring,通过这个过程来体会spring的妙用。
package com.crj;
public class User {
public User(){
System.out.println("无参构造被执行了");
}
public void add(){
System.out.println("add...");
}
}
在前面创建的xml文件中配置<bean>
<?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">
<!--在spring中完成对象的创建
借助bean标签
id属性:唯一标识
class属性:要创建对象所在类的全路径
-->
<bean id="user" class="com.crj.User"></bean>
</beans>
配置好后我们创建一个测试类来测试一下对象是否可以创建成功,按照之前的语法,我们在实例化对象的时候会采用User user = new User()来实例化对象,这里不再使用new对象的方式来获取user对象,而是把这个过程交给spring即可。
package com.crj;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestUser {
@Test
public void testUserObject(){
//加载spring配置文件,对象创建
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
//获取创建的对象
User user = (User)context.getBean("user");
System.out.println(user);
//使用对象调用方法进行测试
user.add();
}
}
spring返回创建的对象过程
- 加载bean.xml文件
- 对文件进行解析操作
- 获取xml文件bean标签属性值
- 使用Java反射的方式根据类的全路径创建对象
- 创建后的对象会存储在一个容器map集合中
//Java反射的方式
Class clazz = Class.forName("com.crj.User")
User user = (User)clazz.getDeclaredConstructor().newInstance()
3.3 日志框架Log4j2
Apache Log4j2是一个开源的日志记录组件,使用非常的广泛。在工程中以易用方便代替了System.out等打印语句,它是JAVA下最流行的日志输入工具。Log4j2主要有几个重要的部分:明确日志信息的优先级(其中优先级高的日志级别会自动屏蔽优先级低的日志,换句话说就是只会显示优先级高的日志);明确日志信息的输出目的地;日志信息的输出格式。
在正式使用日志信息Log4j2这个组件之前,我们除了在最开始的bean.xml中引入组件外,还需要单独配置日志文件的设置。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<loggers>
<!--
level指定日志级别,从低到高的优先级:
TRACE < DEBUG < INFO < WARN < ERROR < FATAL
trace:追踪,是最低的日志级别,相当于追踪程序的执行
debug:调试,一般在中,都将其设置为最低的日志级别
info:信息,输出重要的信息,使用较多
warn:警告,输出警告的信息
error:错误,输出错误信息
fatal:严重错误
-->
<root level="DEBUG">
<appender-ref ref="spring6log" />
<appender-ref ref="RollingFile" />
<appender-ref ref="log" />
</root>
</loggers>
<appenders>
<!-- 输出日志信息到控制台-->
<console name="spring6log" target="SYSTEM_OUT">
<!-- 控制日志的输出格式-->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss SSS} [%t] %-3level %logger{1024} - %msg%n"/>
</console>
<!-- 会在本地你指定的路径下创建一个log文件,在每次执行程序的时候可能自动清空这是由append属性来决定,适合测试使用-->
<File name="log" fileName="自己设置的存储路径/test.log" append="false">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
<!-- 打印所有的信息并在每次大小超过size后就会自动压缩作为存档-->
<RollingFile name="RollingFile" fileName="自己设定的存储路径/app.log" filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss-z} %-5level %class{36} %L %M - %msg%xEx%n"/>
<SizeBasedTriggeringPolicy size="50MB"/>
<!--DefaultRoLLoverstrategy属性如不设置,
刚默认为最多同一文件夹下7个文件,这里设置了20-->
<DefaultRolloverStrategy max="20"/>
</RollingFile>
</appenders>
</configuration>
测试一下
package com.crj;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestUser {
// 手动执行日志写入,首先创建一个Logger对象
private Logger logger = LoggerFactory.getLogger(TestUser.class);
@Test
public void testUserObject(){
//加载spring配置文件,对象创建
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
//获取创建的对象
User user = (User)context.getBean("user");
System.out.println(user);
//使用对象调用方法进行测试
user.add();
//手动写日志
logger.info("执行调用成功。。。");
}
}
控制台输出:
总结
其实这篇文章荔枝并没有长篇大论地去介绍Spring的体系内容,荔枝主要还是记录以下自己是如何创建工程的、踩到了什么坑、粗浅了解下Spring框架的体系结构以及体会以下入门案例哈哈哈,希望能帮助到有需要的小伙伴~~~
今朝已然成为过去,明日依然向往未来!我是小荔枝,在技术成长的路上与你相伴,码文不易,麻烦举起小爪爪点个赞吧哈哈哈~~~ 比心心♥~~~