文章目录
第一章 继承
1 需求
a项目 需要mysql包
b项目 需要mysql包
c项目 需要mysql包
都需要,所以需要配置三次
问题:
重复的代码配置了三次, 次数 100万个项目, 配置100万次
解决:
继承了, 拥有了父类的一切
子pom继承父pom文件
2 父pom文件
<?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.itheima</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>dao</module>
<module>service</module>
<module>web</module>
</modules>
<!--单独定义版本号 方便维护-->
<properties>
<!--mysql数据库驱动的版本-->
<mysql.version>5.1.46</mysql.version>
<c3p0.version>0.9.1.2</c3p0.version>
<dbUtils.version>1.6</dbUtils.version>
<servlet.version>3.1.0</servlet.version>
<beanUtils.version>1.8.0</beanUtils.version>
<lombok.version>1.18.8</lombok.version>
</properties>
<!--
父项目使用,子项目继承我的jar坐标
删除src,不需要写代码
指定父项目的打包方式 pom
-->
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>${beanUtils.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>${dbUtils.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>${c3p0.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<!--编译插件, jdk8-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
3 子pom文件(以dao层举例)
<?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">
<!--
配置的是,当前工程的父工程坐标
dao子工程,继承父工程坐标
-->
<parent>
<artifactId>parent</artifactId>
<groupId>com.itheima</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dao</artifactId>
</project>
第二章 聚合工程
分模块开发:
web模块依赖service模块,service模块依赖dao模块
tips:
war包:打包成web项目
jar包:普通java项目
1 创建父工程
选择无骨架,无代码,只编写pom文件
1.1 删除src目录
因为这个项目的唯一作用是用来管理版本的, 所以删掉没有用的src目录
删除完成,如下图
1.2 修改pom.xml管理版本
见第一章继承里的父pom文件
2 子模块(dao、service、web)
2.1 dao层(不用骨架)
pom.xml
<?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">
<!--
配置的是,当前工程的父工程坐标
dao子工程,继承父工程坐标
-->
<parent>
<artifactId>parent</artifactId>
<groupId>com.itheima</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dao</artifactId>
</project>
2.2 service层(不用骨架)
与dao层类似,service层依赖dao层
<?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">
<parent>
<artifactId>parent</artifactId>
<groupId>com.itheima</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>service</artifactId>
<dependencies>
<!--
定义依赖jar包,依赖dao层
写dao层的坐标
-->
<dependency>
<groupId>com.itheima</groupId>
<artifactId>dao</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
2.3 web层(使用骨架)
使用webapp骨架建立,pom中删除与父类冲突或冗余的包
web层依赖service层,添加service的jar包依赖
pom.xml
<?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">
<parent>
<artifactId>parent</artifactId>
<groupId>com.itheima</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>web</artifactId>
<packaging>war</packaging>
<name>web Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<!--定义业务层的依赖 jar-->
<dependencies>
<dependency>
<groupId>com.itheima</groupId>
<artifactId>service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<!--使用Tomcat插件,定义在这里,只有web项目才能使用-->
</build>
</project>
3 注意事项
启动tomcat报错
先install父类的,再dao、service、web
打成的war包地址在本地的repository仓库中
最后web的war包中包含dao、service的jar包,可以直接到Tomcat的webapp中替换root直接发布
第三章 Maven常用命令
1 clean命令
2 compile命令
3 test命令
test下的junit
4 package命令
mvn package, 打包项目
对java项目
对web项目
5 install命令
mvn install, 打包后将其安装在本地仓库
第四章 面向接口编程
引入:dao层代码需要改动,那么service、web层代码都要变动
解决:使用Beanfactory来提供service的实现类,通过反射机制结合配置文件来创建service的实现类对象。这样只需要改动配置文件就行.
bean.properties
UserService=com.itheima.service.impl.UserServiceImpl
UserDao=com.itheima.dao.impl.UserDaoImpl
package com.itheima.utils;
import com.itheima.service.UserService;
import java.util.ResourceBundle;
public class BeanFactory {
/**
* 读取配置文件,创建实现类对象返回
* 方法: 传递接口,根据接口名读取键值对
* 创建出接口实现类对象
*
* 参数是一个接口的class对象
*
* UserService=com.itheima.service.impl.UserServiceImpl
*
* Class类方法: getSimpleName()获取class对象的简单名字
*
* UserService
*/
public static <T> T getInstance(Class<T> clazz){
T obj = null;
try {
//获取到接口名
String simpleName = clazz.getSimpleName();
//System.out.println(simpleName);
ResourceBundle bundle = ResourceBundle.getBundle("bean");
//接口名作为键
String className = bundle.getString(simpleName);
//反射创建对象
obj =(T) Class.forName(className).newInstance();
}catch (Exception ex){
ex.printStackTrace();
}
return obj;
}
}
package com.itheima.web;
import com.itheima.dao.UserDao;
import com.itheima.service.UserService;
import com.itheima.service.impl.UserServiceImpl;
import com.itheima.utils.BeanFactory;
public class Servlet {
public void doGet(){
/**
* web层获取业务层接口实现类,不能new
* 通过工具类 BeanFactor获取
* 传递业务层的接口
*/
UserService userService = BeanFactory.getInstance(UserService.class);
userService.register();
UserDao userDao = BeanFactory.getInstance(UserDao.class);
userDao.register();
}
}