2 Spring入门

2.1 环境要求

JDK:Java17+

Maven:3.6+

Spring:6.0.2

2.2 构建模块

创建Maven聚合工程:父工程Spring6 子模块spring-first

2.3 入门案例实现步骤

入门案例开发步骤:

第一步:引入spring相关依赖

​ spring-context

junit-jupiter-api

第二步:创建类,定义属性和方法

第三步:按照spring要求创建配置文件(xml格式)

第四步:在spring配置文件中配置相关信息

第五步:进行最终测试

2.4 入门案例程序开发

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();
    }
}
复制代码

执行测试代码:

 

2.5 入门案例程序分析

  • 之前创建对象,无参数构造执行?

    • 执行了

  • 不用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 启动Log4j2日志框架

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("#####  执行调用成功了。。");
    }
}
复制代码

 

posted @   菜菜子想要飞  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示