D49-maven高级(工程聚合和拆分,父子工程)

一、maven基础回顾

1.1 maven两大核心功能

  • 依赖管理: 对jar包的管理过程。原来传统工程项目中放置jar包,maven工程项目中方式jar包坐标,。而真正的jar包放在中央仓库。目的:实现代码的可重用。
    • 仓库分为三类:本地仓库,私服(远程仓库),中央仓库。
  • 一键构建: 使用maven集成的tomcat插件对项目进行编译,测试,打包,安装,部署 等操作。

1.2 Maven的三套生命周期

  • 清理生命周期: clean 删除target
  • 默认声明周期:
  1. complie 编译main下面的java文件,生成.class
  2. test:测试
  3. package:将工程打包到target中
  4. install:把maven项目打包到本地仓库
  5. deploy:将打好的包安装到远程仓库,供其他项目使用。
  • 站点生命周期: 了解

二、回顾SSM整合

2.1 jar包之间的依赖关系,直接依赖和传递依赖

直接依赖: A项目中导入了B包,A直接依赖于B。
传递依赖: A项目中导入了B包,B包直接依赖于C包,最终也可以在A项目中使用C,可以说A传递依赖于C。

2.2 导入jar包的三要素

2.2.1 第一声明优先原则

哪个jar包在靠上的位置,最终项目进入的就是哪个jar包下的依赖包。

2.2.2 路径近者优先原则

直接依赖路径近与传递依赖路径。

2.2.3 直接排除法

2.3、pom文件中可以放三类信息:

  • 项目自身坐标信息
  • 项目运行所依赖的jar包的信息
  • 项目运行的环境信息

2.4 编写代码

创建MavenWeb工程:
在这里插入图片描述

2.4.1编写dao层代码

提供dao接口

public interface ItemsDao {
@Select("select * from items where id = #{id}")
   public Items findById(Integer id);
}

编写mybatis的spring配置文件–applicationContext.xml

<!--dao配置开始-->
    <!--数据库连接池-->
    <bean id="c3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql:///day02_spring"/>
        <property name="user" value="root"/>
        <property name="password" value="root"/>
    </bean>

    <!--得到生产SqlSessionFactory的工厂对象-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="c3p0"></property>
    </bean>

    <!--自动扫描dao接口包,给其下所有接口生成代理对象,并放入到ioc容器中-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.zsl.dao"></property>
    </bean>
    <!--dao配置结束-->

测试类

@Test
    public void daoTest(){
        //得到ioc容器
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //从容器中拿到代理对象
        ItemsDao dao = context.getBean(ItemsDao.class);
        Items byId = dao.findById(1);
        System.out.println(byId.getName());
    }

2.4.2 编写service层代码

提供service接口

public interface ItemsService {
    Items findById(Integer id);
}

实现service的实现类

@Service
public class ItemsServiceImpl  implements ItemsService {
    @Autowired
    private ItemsDao itemsDao;

    @Override
    public Items findById(Integer id) {
        return itemsDao.findById(id);
    }
}

提供service配置文件—applicationContext.xml

<!--service配置开始-->

    <!--开启组件扫描-->
    <context:component-scan base-package="com.zsl.service"></context:component-scan>

    <!--开启事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="c3p0"></property>
    </bean>

    <!--配置事务的通知-->
<tx:advice id="advice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="find*" read-only="true"/>
        <tx:method name="*" propagation="REQUIRED"></tx:method>
    </tx:attributes>
</tx:advice>
    <!--配置切面-->
    <aop:config>
        <!--切入点表达式-->
        <aop:pointcut id="pointcut" expression="execution(* com.zsl.service.Serviceimpl.*.*(..))"></aop:pointcut>
        <aop:advisor advice-ref="advice" pointcut-ref="pointcut"></aop:advisor>
    </aop:config>
    <!--service配置结束-->

提供测试类

 @Test
    public void serviceTest(){
        //得到IOC容器
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        //从容器中拿到dao的代理对象
        ItemsService itemsService = ac.getBean(ItemsService.class);
        Items items = itemsService.findById(1);
        System.out.println(items.getName());
    }

2.4.3 编写web层代码

编写处理器–ItemsController

@Controller
@RequestMapping("/items")
public class ItemsController {
    @Autowired
    private ItemsService itemsService;

    @RequestMapping("/showDetail")
    public String showDetail(Model model){
        Items byId = itemsService.findById(1);
        model.addAttribute("item",byId);
        return "itemDetail";
    }
}

编写web.xml配置文件

<!--编写编码过滤器-->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
<!--配置前端控制器-->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
   <servlet-mapping>
       <servlet-name>dispatcherServlet</servlet-name>
       <url-pattern>/</url-pattern>
   </servlet-mapping>

    <!--配置spring的核心监听器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!--重新指定spring配置文件的路径和名称-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

编写spring-mvc.xml配置文件

 <!--开启ioc扫描-->
    <context:component-scan base-package="com.zsl.controller"></context:component-scan>

    <!--开启mvc注解支持-->
    <mvc:annotation-driven></mvc:annotation-driven>

    <!--视图解析器-->
<bean id="internalResourceViewResolver"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/pages/"></property>
    <property name="suffix" value=".jsp"></property>
</bean>
    <!--释放静态资源-->
<mvc:default-servlet-handler></mvc:default-servlet-handler>

提供请求视图 — index.jsp

<body>
<% response.sendRedirect(request.getContextPath()+"/items/showDetail"); %>
</body>

三、工程拆分与聚合的思想

  • maven工程拆分就是为了把一个项目变成N个独立的模块,使代码更充分的可重用。
    • maven工程的聚合 就是把多个模块合在一起变成一个新的项目。

3.1 父子工程以及子模块之间的关系

  • 父子关系直接是继承关系,子模块天生可以使用父工程的资源。
  • 子模块本没有任何关系,后天可以建立关系,这叫依赖。
    工程和模块的区别:
  • 工程可以单独创建
  • 模块必须在工程下
    建立模块之间的依赖关系: web依赖service,service依赖dao。

3.2 父子工程的创建

在这里插入图片描述

将上面的代码按照子模块的名称依次复制过来即可。

3.3 注意

  • 需要在service子模块中的applicationContext.xml中添加
 <import resource="classpath:applicationContext-dao.xml"></import>

目的: 继承dao层实现的功能。

  • 应该将service层的配置文件改为applicationContext-service.xml 为了加以区分。

猜你喜欢

转载自blog.csdn.net/qq_33852347/article/details/85323342