兴趣爱好Javajava学习笔记 -Spring6
执笔
添加Spring依赖
1 2 3 4 5 6
| <!--spring6--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>6.0.2</version> </dependency>
|
Log4j2
依赖
1 2 3 4 5 6 7 8 9 10 11
| <!--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,文件必须放到类根路径下。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| <?xml version="1.0" encoding="UTF-8"?> <configuration> <loggers>
<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>
<File name="log" fileName="d:/spring6_log/test.log" append="false"> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> </File>
<RollingFile name="RollingFile" fileName="d:/spring6_log/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 max="20"/> </RollingFile> </appenders> </configuration>
|
使用
1 2 3 4 5 6 7 8 9 10 11
| @Test public void testUserObject(){ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); User user = (User) context.getBean("user"); user.add(); logger.info("#### 执行调用成功... ####"); }
|
IOC容器
- IoC 是 Inversion of Control 的简写
- IoC 容器管理的 Java 对象称为 Spring Bean,它与使用关键字 new 创建的 Java 对象没有任何区别
控制反转(IoC)
依赖注入
- DI(Dependency Injection):依赖注入,依赖注入实现了控制反转的思想
- 指Spring创建对象的过程中,将对象依赖属性通过配置进行注入
ApplicationContext的主要实现类
类型名 |
简介 |
ClassPathXmlApplicationContext |
通过读取类路径下的 XML 格式的配置文件创建 IOC 容器对象 |
FileSystemXmlApplicationContext |
通过文件系统路径读取 XML 格式的配置文件创建 IOC 容器对象 |
ConfigurableApplicationContext |
ApplicationContext 的子接口,包含一些扩展方法 refresh() 和 close() ,让 ApplicationContext 具有启动、关闭和刷新上下文的能力。 |
WebApplicationContext |
专门为 Web 应用准备,基于 Web 环境创建 IOC 容器对象,并将对象引入存入 ServletContext 域中。 |
基于XML管理Bean
- 创建类
1 2 3 4 5 6
| package com.zhibi.spring6; public class User { public void hello(){ System.out.println("....hello"); } }
|
- 配置xml文件
1 2 3 4 5 6 7
| <?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">
<bean id="user" class="com.zhibi.spring6.bean.User"></bean> </beans>
|
- 测试类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public class TestUser { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); User user = (User)context.getBean("user"); System.out.println("1. 根据bean id获取" + user);
User user1 = context.getBean(User.class); System.out.println("2. 根据类型获取bean" +user1);
User user2 = context.getBean("user", User.class); System.out.println("3. 根据id和类型" + user2); } }
|
依赖注入setter注入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <bean id="book" class="com.zhibi.spring6.di.Book"> <property name="bname" value="再学一万年"></property> <property name="author" value="执笔"></property> <property name="other"> <value><![CDATA[a < b]]></value> </property> </bean>
|
依赖注入构造器注入
1 2 3 4 5 6
| <bean id="book-con" class="com.zhibi.spring6.di.Book"> <constructor-arg name="bname" value="再来亿遍"></constructor-arg> <constructor-arg index="1" value="执笔"></constructor-arg> </bean>
|
特殊值处理
字面量赋值
int a = 10;
声明一个变量a,初始化为10,此时a就不代表字母a了,而是作为一个变量的名字
而如果a是带引号的:’a’,那么它现在不是一个变量,它就是代表a这个字母本身,这就是字面量。所以字面量没有引申含义,就是我们看到的这个数据本身。
1 2
| <property name="name" value="张三"/>
|
null值
1 2 3
| <property name="name"> <null /> </property>
|
注意:
1
| <property name="name" value="null"></property>
|
以上写法,为name所赋的值是字符串null
xml实体
1 2 3
|
<property name="expression" value="a < b"/>
|
CDATA节
1 2 3 4 5 6 7
| <property name="expression"> <value><![CDATA[a < b]]></value> </property>
|
为对象类型属性赋值