一、导学


二、
1.入门程序
spring快照版本是最新的版本,未发布。需要用到<repository></>

下面这个不需要配置仓库,直接写在依赖中就行

引入spring相关依赖
<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.grin</groupId>
    <artifactId>spring-002-first</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 打包方式  -->
    <packaging>jar</packaging>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.10</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project> 
 
疑惑:
1.类加载路径
类路径classpath指的是编译后路径即:
 本项目[或模块目录]/target/[项目或模块名]/WEB-INF/classes
原项目中java目录下的文件和recource目录下的文件页都被打包到了此类路径下。
如下图: java目录中的文件和recource目录中的文件经过编译后,都会放到WEB-INF/classes目录下:


把test写成private后,外界调用不了这个测试方法。

一个小细节:发现构造方法,不是在getBean()时创建的。

证明如下:




2.spring6启用log4j2框架
上去就报错了
Cannot reconnect

第一步:引入依赖
<!--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> 
第二步:在类的根路径下提供log4j2.xml配置文件(文件名固定为:log4j2.xml,文件必须放到类根路径下。)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <loggers>
        <!--
            level指定日志级别,从低到高的优先级:
                ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
        -->
        <root level="DEBUG">
            <appender-ref ref="spring6log"/>
        </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>
    </appenders>
</configuration> 
第三步:使用日志框架
Logger logger = LoggerFactory.getLogger(FirstSpringTest.class);
logger.info("我是一条日志消息"); 
 
在配置文件中,已经指定了 debug日志级别, 很有意思。当打印日志时,如果低于这个级别,则不会打印出来。
除此之外,你可以在配置文件中去指定这个级别。
三、 spring对loc(控制反转) 的实现
1.set注入。
配合property标签,
注意 name是 本类的set方法的名字:去掉set,首字母小写
ref 是所要引用 的其他类。
总之,通过 本类的set方法对所引用的类进行注入。
‘
2.构造注入
利用 <constructor-arg name="" ref=" "> , name属性可被 索引,类型推断 替代。



3.内部bean和外部
没有那么复杂,声明在外面的bean叫做 外部bean,有自己的 id 和class .
而内部bean写在<property>中,不需要class

4.给简单类型注入
疑惑:为什么要给它注入。


下面是spring中认为的基本数据类型,不使用ref来引用,而是通过name属性。
但要注意 Date类型的注入,要满足它所要求的格式。
在实际开发中,不会用Date这种注入方式,应该有更好的。

经典:

注入空字符串


注入的值含有 特殊符号
第二种方案,只能用<value></value>标签

p命名空间
c命名空间
schemaLocation
下面这两个 自动装配 是基于set方法 的
根据名字自动装配
根据类型自动装配
根据类型进行自动装配时,在有效的配置文件当中,某种类型的实例只能有一个
引入外部属性,context命名空间
当加载时,会默认先加载windows中的环境变量,因此要在properties文件中的key前 加上 jdbc前缀
四、bean作用域
参考资料:
【文字+图示】Java项目中类路径classpath具体指的是哪个路径_超周到的程序员的博客-CSDN博客


















