【Spring5】框架新功能
Spring5框架新功能
整个Spring5框架的代码基于Java8,运行时兼容JDK9,许多不建议使用的类和方法在代码库中删除。
Spring5自带了通用的日志封装:log4j2
已经移除了log4jConfigListener
①导入所需的Jar包依赖
log4j-api-2.11.2.jar
log4j-core-2.11.2.jar
log4j-slf4j-impl-2.11.2.jar
log4j2.xml
slf4j-api-1.7.30.jar
②创建xml配置文件
名称固定为log4j2.xml
<?xml version="1.0" encoding="UTF-8"?> <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --> <!--Configuration后面的status用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,可以看到log4j2内部各种详细输出--> <configuration status="INFO"> <!--先定义所有的appender--> <appenders> <!--输出日志信息到控制台--> <console name="Console" target="SYSTEM_OUT"> <!--控制日志输出的格式--> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </console> </appenders> <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--> <!--root:用于指定项目的根日志,如果没有单独指定Logger,则会使用root作为默认的日志输出--> <loggers> <root level="info"> <appender-ref ref="Console"/> </root> </loggers> </configuration>
控制台输出
"C:\Program Files\Java\jdk1.8.0_301\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\software\IntelliJ IDEA 2020.3.4\lib\idea_rt.jar=58596:D:\software\IntelliJ IDEA 2020.3.4\bin" -Dfile.encoding=UTF-8 -classpath "D:\software\IntelliJ IDEA 2020.3.4\lib\idea_rt.jar;D:\software\IntelliJ IDEA 2020.3.4\plugins\junit\lib\junit5-rt.jar;D:\software\IntelliJ IDEA 2020.3.4\plugins\junit\lib\junit-rt.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\rt.jar;D:\Programing\Hikaru\out\production\Hikaru;D:\Programing\Hikaru\lib\com.springsource.net.sf.cglib-2.2.0.jar;D:\Programing\Hikaru\lib\com.springsource.org.aopalliance-1.0.0.jar;D:\Programing\Hikaru\lib\com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar;D:\Programing\Hikaru\lib\commons-logging-1.1.1.jar;D:\Programing\Hikaru\lib\spring-aspects-5.2.6.RELEASE.jar;D:\Programing\Hikaru\lib\spring-beans-5.2.6.RELEASE.jar;D:\Programing\Hikaru\lib\spring-context-5.2.6.RELEASE.jar;D:\Programing\Hikaru\lib\spring-core-5.2.6.RELEASE.jar;D:\Programing\Hikaru\lib\spring-expression-5.2.6.RELEASE.jar;C:\Users\admin\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\admin\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;D:\Programing\Hikaru\lib\spring-aop-5.2.6.RELEASE.jar;D:\Programing\Hikaru\lib\mysql-connector-java-8.0.28.jar;D:\Programing\Hikaru\lib\spring-tx-5.2.6.RELEASE.jar;D:\Programing\Hikaru\lib\spring-orm-5.2.6.RELEASE.jar;D:\Programing\Hikaru\lib\spring-jdbc-5.2.6.RELEASE.jar;D:\Programing\Hikaru\lib\druid-1.1.9.jar;D:\Programing\Hikaru\lib\log4j-api-2.11.2.jar;D:\Programing\Hikaru\lib\log4j-core-2.11.2.jar;D:\Programing\Hikaru\lib\log4j-slf4j-impl-2.11.2.jar;D:\Programing\Hikaru\lib\slf4j-api-1.7.30.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.hikaru.service.AccountService,test 2022-04-10 09:27:20.937 [main] INFO com.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited Process finished with exit code 0
手动输出Log4j2日志:LoggerFactory.getLogger
public class Log4j2Test { private static final Logger log = LoggerFactory.getLogger(Log4j2Test.class); public static void main(String[] args) { log.info("info log4j2"); log.warn("warn log4j2"); } }
核心容器
支持候选组件索引(也可支持环境变量扫描)
支持@Nullable注解
①加在属性上面表示属性可以为空
@Nullable @Autowired private JdbcTemplate jdbcTemplate;
②加在方法上面可以表示属性返回值可以为空
③加在方法形参可以表示方法参数可以为空
@Nullable @Override public void addMoney(@Nullable String id, double money) { String sql = "update t_account set money=money+? where id=?"; jdbcTemplate.update(sql, money, id); }
函数式风格:GenericApplicationContext
目的是为了将new的对象加入IOC容器中
@Test public void GenericContextText() { GenericApplicationContext context = new GenericApplicationContext(); //清空IOC容器 context.refresh(); context.registerBean(Book.class, () -> new Book()); Book book = context.getBean("com.hikaru.Book", Book.class); System.out.println(book); }
() -> new Book()为lambda表达式,lambda表达式允许将一个函数作为参数返回
如:(int x, int y) -> x + y,表示一个接收两个值并返回他们的和的函数
在IOC容器中注册Bean的时候并没有默认Bean的名字为首字母小写的类名,因此这里使用了Bean的全路径
也可以使用下面的方式指定IOC中Bean的名称:
@Test public void GenericContextText() { GenericApplicationContext context = new GenericApplicationContext(); //清空IOC容器 context.refresh(); context.registerBean("book", Book.class, () -> new Book()); Book book = context.getBean("book", Book.class); System.out.println(book); }
Spring5 支持整合JUnit5
整合JUnit4
①注解声明单元测试框架
②注解加载配置文件
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:bean.xml") public class JUnitTest { @Autowired AccountService accountService; @Test public void test1() { accountService.accountMoney("1001", "1002", 500); } }
@RunWith(SpringJUnit4ClassRunner.class) 可以使单元测试直接使用IOC容器,而不必通过applicationContext的方式
@ContextConfiguration("classpath:bean.xml")加载xml配置,执行IOC容器的一系列操作,所以下面的属性可以直接装配
Spring5整合Junit5
①引入Junit5的jar包
②创建测试类,同上
注解引用:
@ExtendWith(SpringExtension.class)
配置文件引入注解:
@ContextConfiguration("classpath:bean1.xml")
复合注解,等同于上面的两个写法:
@SpringJunitConfig("classpath:bean1.xml")
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步