2 Spring入门
JDK:Java17+
Maven:3.6+
Spring:6.0.2
创建Maven聚合工程:父工程Spring6 子模块spring-first
入门案例开发步骤:
第一步:引入spring相关依赖
spring-context
junit-jupiter-api
第二步:创建类,定义属性和方法
第三步:按照spring要求创建配置文件(xml格式)
第四步:在spring配置文件中配置相关信息
第五步:进行最终测试
User.java文件
package com.caicaizi.spring6; public class User { public void add(){ System.out.println("add....."); } }
bean.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"> <!--完成User对象创建 bean标签 id属性:唯一的标识 class属性:要创建对象所在类的全路径(包名称+类名称) --> <bean id="user" class="com.caicaizi.spring6.User"></bean> </beans>
TestUser.java文件
package com.caicaizi.spring6; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestUser { @Test public void testserObject() { //加载spring的配置文件进行对象的创建 ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); //获取创建的对象 User user = (User) context.getBean("user"); System.out.println(user); //使用对象调用方法进行测试 user.add(); } }
执行测试代码:
-
之前创建对象,无参数构造执行?
-
执行了
-
-
不用new的方式,还可以如何创建对象?
-
反射
-
如何使用反射创建对象
-
加载bean.xml配置文件
-
对xml文件进行解析操作
-
获取xml文件bean标签属性值(id和class属性值)
-
使用反射根据类全路径创建对象(反射--得到类的字节码文件,通过字节码文件操作类中所有内容)
Class clazz = Class.forName(class属性值)
//获取类Class对象 Class clazz = Class.forName("com.caicaizi.spring6.User"); //调用方法创建对象 User user = (User) clazz.getDeclaredConstructor().newInstance();
-
-
创建对象放到哪里?
private final Map<String, BeanDefinition> beanDefinitionMap;
key:唯一标识
value:类的定义(描述信息)
2.6.1 引入依赖
<!--log4j2的依赖--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.19.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j2-impl</artifactId> <version>2.19.0</version> </dependency>
2.6.2 加入日志配置文件
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?> <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --> <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出--> <!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数--> <configuration> <loggers> <!-- level指定日志级别,从低到高的优先级: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL trace:追踪,是最低的日志级别,相当于追踪程序的执行 debug:调试,一般在开发中,都将其设置为最低的日志级别 info:信息,输出重要的信息,使用较多 warn:警告,输出警告的信息 error:错误,输出错误信息 fatal:严重错误 --> <root level="DEBUG"> <appender-ref ref="spring6log"/> <appender-ref ref="RollingFile"/> <appender-ref ref="log"/> </root> </loggers> <!--定义所有的appender--> <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="logs/test.log" append="false"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> </File> <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--> <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"> <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss:SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> <SizeBasedTriggeringPolicy size="50 MB"/> <!--DefaultRolloverStrategy属性如不设置, 则默认最多同一文件夹下7个文件,这里设置了20--> <DefaultRolloverStrategy max="20"/> </RollingFile> </appenders> </configuration>
2.6.3 测试
直接执行测试用例:testUserObject
2.6.4 使用日志
private Logger logger = LoggerFactory.getLogger(TestUser.class); //手动写日志 logger.info("##### 执行调用成功了。。");
完整测试用例:TestUser.java
package com.caicaizi.spring6; 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 { private Logger logger = LoggerFactory.getLogger(TestUser.class); @Test public void testserObject() { //加载spring的配置文件进行对象的创建 ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); //获取创建的对象 User user = (User) context.getBean("user"); System.out.println(user); //使用对象调用方法进行测试 user.add(); //手动写日志 logger.info("##### 执行调用成功了。。"); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南