# java01-homework-week5 **Repository Path**: naijizf/java01-homework-week5 ## Basic Information - **Project Name**: java01-homework-week5 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-11-29 - **Last Updated**: 2021-12-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ```java 1.(选做)使 Java 里的动态代理,实现一个简单的 AOP。 2.(必做)写代码实现 Spring Bean 的装配,方式越多越好(XML、Annotation 都可以), 提交到 GitHub。 3.(选做)实现一个 Spring XML 自定义配置,配置一组 Bean,例如:Student/Klass/School。 4.(选做,会添加到高手附加题) 4.1 (挑战)讲网关的 frontend/backend/filter/router 线程池都改造成 Spring 配置方式; 4.2 (挑战)基于 AOP 改造 Netty 网关,filter 和 router 使用 AOP 方式实现; 4.3 (中级挑战)基于前述改造,将网关请求前后端分离,中级使用 JMS 传递消息; 4.4 (中级挑战)尝试使用 ByteBuddy 实现一个简单的基于类的 AOP; 4.5 (超级挑战)尝试使用 ByteBuddy 与 Instrument 实现一个简单 JavaAgent 实现无侵入下的 AOP。 5.(选做)总结一下,单例的各种写法,比较它们的优劣。 6.(选做)maven/spring 的 profile 机制,都有什么用法? 7.(选做)总结 Hibernate 与 MyBatis 的各方面异同点。 8.(必做)给前面课程提供的 Student/Klass/School 实现自动配置和 Starter。 9.(选做)学习 MyBatis-generator 的用法和原理,学会自定义 TypeHandler 处理复杂类型。 10.(必做)研究一下 JDBC 接口和数据库连接池,掌握它们的设计和用法: 1)使用 JDBC 原生接口,实现数据库的增删改查操作。 2)使用事务,PrepareStatement 方式,批处理方式,改进上述操作。 3)配置 Hikari 连接池,改进上述操作。提交代码到 GitHub。 附加题(可以后面上完数据库的课再考虑做): (挑战) 基于 AOP 和自定义注解,实现 @MyCache(60) 对于指定方法返回值缓存 60 秒。 (挑战) 自定义实现一个数据库连接池,并整合 Hibernate/Mybatis/Spring/SpringBoot。 (挑战) 基于 MyBatis 实现一个简单的分库分表 + 读写分离 + 分布式 ID 生成方案。 ``` # 第二题 Bean 配置方式 1. XML XML配置 ![XML装配](./doc/bean-xml.png) ![XML装配2](./doc/bean-xml2.png) 2. @Service 半自动注解配置 ![Java装配](./doc/JavaBean.png) 3. @Bean @Configuration Java Config配置 ![配置类装配](./doc/config-bean.png) 4. @Condition @AutoConfigureX 全自动注解配置 > ??? # 第八题 1. 创建 Properties 类 ![starter-properties](./doc/starter-2.png) 2. 创建主配置类 ![starter-autoconfig](./doc/starter-1.png) 3. 配置factories ![factories](./doc/starter-spring-factories.png) 4. 配置starter名称 ![provides](./doc/starter-spring-provides.png) # 第十题 ## 1. 使用 JDBC 原生接口,实现数据库的增删改查操作 1. 在 POM 中添加 MySQL 连接库 2. 一个简单的查询语句的实现[代码](./jdbc-demo/src/main/java/dev/naijiz/java01homework/week5/jdbcdemo/jdbc/JdbcBaseDemo.java) ![jdbc-query](./doc/jdbc-1.png) ## 2. 使用事务,PrepareStatement 方式,批处理方式,改进上述操作。 1. 在 POM 中添加 MySQL 连接库 2. 一个简单的查询语句的实现[代码](./jdbc-demo/src/main/java/dev/naijiz/java01homework/week5/jdbcdemo/jdbc/JdbcBaseDemo.java) ![jdbc-query](./doc/jdbc-1.png) 2.1 PrepareStatement [代码](./jdbc-demo/src/main/java/dev/naijiz/java01homework/week5/jdbcdemo/jdbc/JdbcPrepareStatementDemo.java) ![jdbc-preparestatement](./doc/jdbc-prepare-state.png) 2.2 batch [代码](./jdbc-demo/src/main/java/dev/naijiz/java01homework/week5/jdbcdemo/jdbc/JdbcPrepareStatementDemo.java) ![jdbc-batch](./doc/jdbc-batch.png) 2.3 事务 [代码](./jdbc-demo/src/main/java/dev/naijiz/java01homework/week5/jdbcdemo/jdbc/JdbcPrepareStatementDemo.java) ![jdbc-transaction](./doc/jdbc-transaction.png) 3. hikari连接池 [代码](/jdbc-demo/src/main/java/dev/naijiz/java01homework/week5/jdbcdemo/hikari/HikariDemo.java) ![hikari](./doc/hikari-1.png)