欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

maven仓库之第二篇

程序员文章站 2023-11-06 22:54:22
1. 什么是maven? 它是一个软件开发的管理工具,主要管理的工作是:依赖管理,项目构建. 2. 使用maven的好处? 能够集中管理jar包,提供一键构建. 3. maven的安装及配置 配置:MAVEN_HOME,PATH路径配置. 本地仓库 : Setti... ......
1. 什么是maven?
        它是一个软件开发的管理工具,主要管理的工作是:依赖管理,项目构建.
    2. 使用maven的好处?
        能够集中管理jar包,提供一键构建.
    3. maven的安装及配置
        配置:maven_home,path路径配置.
        本地仓库 : <localrepository>
        settings.xml 文件中.
        <localrepository>d:/repository</..>
        运行 : mvn -v.
    4. 常用的maven命令
        compile,test,package,install,deploy
        clean
        site
    5. maven 工程是具有一定的目录结构
        src 
            main
                java(程序主要代码)
                resources(配置文件)
                webapps
            test
                java(测试代码)
                resources(测试的配置文件)
        pom.xml(写一些坐标)
    6. eclipse工具下的maven工程开发
    7. 在pom.xml文件中如何引入坐标
        <dependency>
            <groupid>javax.servlet</groupid>
            <artifactid>servlet-api</artifactid>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
    8. 总结
        二、maven工程的拆分与聚合(重点)
            一个完整的早期开发好的crm项目,现在要使用maven工程对它进行拆分,这时候就可以将dao拆解出来形成表现独立的工程,同样service,action也都这样拆分

            工程拆分之后,将来还要聚合(聚合就是将拆分的工程进一步组合在一起,又形成一个完整的项目)
            为了达到聚合的目标,所以今天会引入
            父工程(maven project)
            子模块(maven module)  dao  ,service, web

             开发步骤:
            1.创建一个maven父工程

            点下一步:

            创建后的父工程如下:

            从它的目录结构可以看出,父工程本身不写代码,它里面有一个pom.xml文件,这个文件可以将多个子模块中通用的jar所对应的坐标,集中在父工程中配置,将来的子模块就可以不需要在pom.xml中配置通用jar的坐标了
            2.如何创建这个父工程的一个子模块?

            点next,进入如下图:

            点next,进入如下图:

            3.再次查看父工程的pom.xml文件

            4.查看子模块的pom.xml,发现多了一个 parent结点

            并且内部所包含的结点,其实就是父工程的坐标
            坐标=groupid+artifactid+version
                    组织名   项目名       版本
            三.冲突问题的解决
            1.通过添加<exclusion>标签来解决冲突
            在父工程中引入了struts-core,hibernate-core,就发现jar包是有冲突的
            javassist存在版本上冲突问题

            进入下图:

            背后的父工程的pom.xml文件中,添加的内容 

            2.依赖调解原则:
            maven自动按照下边的原则调解:
            1、第一声明者优先原则
                在pom文件定义依赖,先声明的依赖为准。

            测试:
            如果将上边struts-spring-plugins和spring-context顺序颠倒,系统将导入spring-beans-4.2.4。
            分析:
            由于spring-context在前边以spring-context依赖的spring-beans-4.2.4为准,所以最终spring-beans-4.2.4添加到了工程中。


            2、路径近者优先原则
                例如:a依赖 spirng-beans-4.2.4,a依赖b依赖 spirng-beans-3.0.5,则spring-beans-4.2.4优先被依赖在a中,因为spring-beans-4.2.4相对spirng-beans-3.0.5被a依赖的路径最近。
            测试:
            在本工程中的pom中加入spirng-beans-4.2.4的依赖,根据路径近者优先原则,系统将导入spirng-beans-4.2.4:

            <dependency>
                    <groupid>org.springframework</groupid>
                    <artifactid>spring-beans</artifactid>
                    <version>4.2.4.release</version>
                </dependency>

            2.使用版本锁定实现冲突解决
            首先父工程中pom.xml文件添加:


            在使用坐标时,对于同一个框架,引入多次时,它的版本信息就会多次出现,所以
            可以借用常量的思想,将这些版本号提取出来,在需要用到的时候,直接写版本的常量名称就可以了。

            引用上面的常量

            3.最终在ssh_parent的pom.xml中引入的坐标

        依赖注入手动排除 : 可以当做特殊情况,struts2框架和hibernate框架很少使用共同的jar包.
        声明优先原则 : 选择的依据,根据引入顺序,谁先引入,就先使用谁.
        pom.xml里面的dependencies选项里面的坐标引入的都是直接依赖.
        而通过直接依赖引入的jar包都是传递依赖.
        路径近者优先 : 直接引入的依赖,优先级高于传递进来的依赖.
        
        <!--使用常量来管理以后版本升级的问题 -->
        <properties>
            <spring-version>4.2.4release</spring-version>
        </properties>
        <!-- 依赖管理节点限制使用jar包的版本 -->
        <dependencymanagement>
            <dependencies>
                <dependency>
                    <groupid>org.springframework</groupid>
                    <artifactid>spring-context</artifactid>
                    <version>${spring-version}</version>
                </dependen
            </dependencies>
        </dependcymanagement>
        
    三、依赖关系
        依赖具有传递性,但不是无限传递的,传递的规则如下:
        a-provided-b   b-runtime-c

        解决方法:
        如果在依赖传递过程中,导致jar包丢失,我们的做法很简单,就是再导入一次坐标


        四.编写service模块
        1.创建一个maven module项目
        创建结束后,父工程中结构如下:

        父工程的pom.xml文件如下

        2.在service的pom.xml文件中引入dao的jar包



        web层的子模块创建:


        四、私服搭建
        下载nexus

            nexus 是maven仓库管理器,通过nexus可以搭建maven仓库,同时nexus还提供强大的仓库管理功能,构件搜索功能等。
            下载nexus, 下载地址:http://www.sonatype.org/nexus/archived/


        下载:nexus-2.12.0-01-bundle.zip
         



        安装 :
        1.解压,进入指定的目录

        2.安装并启动这个应用程序
        cmd进入bin目录(e:\sshenv\nexus-2.12.0-01-bundle\nexus-2.12.0-01\bin),执行nexus.bat install


        安装成功在服务中查看有nexus服务:





        卸载nexus
        cmd进入nexus的bin目录,执行:nexus.bat uninstall

        查看window服务列表nexus已被删除。


        启动nexus
        方法1:
            cmd进入bin(你解压的nexus的bin)目录,执行nexus.bat start
        方法2:
            直接启动nexus服务
            

        查看nexus的配置文件conf/nexus.properties


        # jetty section
        application-port=8081      # nexus的访问端口配置
        application-host=0.0.0.0     # nexus主机监听配置(不用修改)
        nexus-webapp=${bundlebasedir}/nexus     # nexus工程目录
        nexus-webapp-context-path=/nexus     # nexus的web访问路径

        # nexus section
        nexus-work=${bundlebasedir}/../sonatype-work/nexus   # nexus仓库目录
        runtime=${bundlebasedir}/nexus/web-inf  # nexus运行程序目录

        访问:
        http://localhost:8081/nexus/
        使用nexus 内置账户admin/admin123登陆:
        点击右上角的log in,输入账号和密码 登陆


        登陆成功:


        nexus的仓库有4种类型:


        1.hosted,宿主仓库,部署自己的jar到这个类型的仓库,包括releases和snapshot两部分,releases公司内部发布版本仓库、 snapshots 公司内部测试版本仓库

        2.proxy,代理仓库,用于代理远程的公共仓库,如maven*仓库,用户连接私服,私服自动去*仓库下载jar包或者插件。 

        3.group,仓库组,用来合并多个hosted/proxy仓库,通常我们配置自己的maven连接仓库组。
        4.virtual(虚拟):兼容maven1 版本的jar或者插件 
        nexus仓库默认在sonatype-work目录中:


        central:代理仓库,代理*仓库


        apache-snapshots:代理仓库
        存储snapshots构件,代理地址https://repository.apache.org/snapshots/
        central-m1:virtual类型仓库,兼容maven1 版本的jar或者插件
        releases:本地仓库,存储releases构件。
        snapshots:本地仓库,存储snapshots构件。
        thirdparty:第三方仓库
        public:仓库组


        需求 :将ssh_dao的这个工程打成jar包,并放入到私服上去.
        配置
        第一步: 需要在客户端即部署dao工程的电脑上配置 maven环境,并修改 settings.xml 文件,配置连接私服的用户和密码 。

        此用户名和密码用于私服校验,因为私服需要知道上传的账号和密码 是否和私服中的账号和密码 一致。


            <server>
              <id>releases</id>
              <username>admin</username>
              <password>admin123</password>
            </server>
            <server>
              <id>snapshots</id>
              <username>admin</username>
              <password>admin123</password>
            </server>

        releases 连接发布版本项目仓库
        snapshots 连接测试版本项目仓库 


        第二步: 配置项目pom.xml 

        配置私服仓库的地址,本公司的自己的jar包会上传到私服的宿主仓库,根据工程的版本号决定上传到哪个宿主仓库,如果版本为release则上传到私服的release仓库,如果版本为snapshot则上传到私服的snapshot仓库

          <distributionmanagement>
            <repository>
                <id>releases</id>
            <url>http://localhost:8081/nexus/content/repositories/releases/</url>
            </repository> 
            <snapshotrepository>
                <id>snapshots</id>
            <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
            </snapshotrepository> 
          </distributionmanagement>

        注意:pom.xml这里<id> 和 settings.xml 配置 <id> 对应! 

        测试
        将项目dao工程打成jar包发布到私服:
        1、首先启动nexus
        2、对dao工程执行deploy命令 
        从私服下载jar包 
        需求
            没有配置nexus之前,如果本地仓库没有,去*仓库下载,通常在企业中会在局域网内部署一台私服服务器,有了私服本地项目首先去本地仓库找jar,如果没有找到则连接私服从私服下载jar包,如果私服没有jar包私服同时作为代理服务器从*仓库下载jar包,这样做的好处是一方面由私服对公司项目的依赖jar包统一管理,一方面提高下载速度,项目连接私服下载jar包的速度要比项目连接*仓库的速度快的多。
            
            本例子测试从私服下载dao 工程jar包。
        管理仓库组
            nexus中包括很多仓库,hosted中存放的是企业自己发布的jar包及第三方公司的jar包,proxy中存放的是*仓库的jar,为了方便从私服下载jar包可以将多个仓库组成一个仓库组,每个工程需要连接私服的仓库组下载jar包。

        打开nexus配置仓库组,如下图:


        上图中仓库组包括了本地仓库、代理仓库等。

        在setting.xml中配置仓库
            在客户端的setting.xml中配置私服的仓库,由于setting.xml中没有repositories的配置标签需要使用profile定义仓库。

        <profile>   
            <!--profile的id-->
           <id>dev</id>   
            <repositories>   
              <repository>  
                <!--仓库id,repositories可以配置多个仓库,保证id不重复-->
                <id>nexus</id>   
                <!--仓库地址,即nexus仓库组的地址-->
                <url>http://localhost:8081/nexus/content/groups/public/</url>   
                <!--是否下载releases构件-->
                <releases>   
                  <enabled>true</enabled>   
                </releases>   
                <!--是否下载snapshots构件-->
                <snapshots>   
                  <enabled>true</enabled>   
                </snapshots>   
              </repository>   
            </repositories>  
             <pluginrepositories>  
                <!-- 插件仓库,maven的运行依赖插件,也需要从私服下载插件 -->
                <pluginrepository>  
                    <!-- 插件仓库的id不允许重复,如果重复后边配置会覆盖前边 -->
                    <id>public</id>  
                    <name>public repositories</name>  
                    <url>http://localhost:8081/nexus/content/groups/public/</url>  
                </pluginrepository>  
            </pluginrepositories>  
          </profile>  

        使用profile定义仓库需要激活才可生效。

          <activeprofiles>
            <activeprofile>dev</activeprofile>
          </activeprofiles>


        配置成功后通过eclipse查看有效pom,有效pom是maven软件最终使用的pom内容,程序员不直接编辑有效pom,打开有效pom

        有效pom内容如下:
        下边的pom内容中有两个仓库地址,maven会先从前边的仓库的找,如果找不到jar包再从下边的找,从而就实现了从私服下载jar包。
        <repositories>
            <repository>
              <releases>
                <enabled>true</enabled>
              </releases>
              <snapshots>
                <enabled>true</enabled>
              </snapshots>
              <id>public</id>
              <name>public repositories</name>
              <url>http://localhost:8081/nexus/content/groups/public/</url>
            </repository>
            <repository>
              <snapshots>
                <enabled>false</enabled>
              </snapshots>
              <id>central</id>
              <name>central repository</name>
              <url>https://repo.maven.apache.org/maven2</url>
            </repository>
          </repositories>
          <pluginrepositories>
            <pluginrepository>
              <id>public</id>
              <name>public repositories</name>
              <url>http://localhost:8081/nexus/content/groups/public/</url>
            </pluginrepository>
            <pluginrepository>
              <releases>
                <updatepolicy>never</updatepolicy>
              </releases>
              <snapshots>
                <enabled>false</enabled>
              </snapshots>
              <id>central</id>
              <name>central repository</name>
              <url>https://repo.maven.apache.org/maven2</url>
            </pluginrepository>
          </pluginrepositories>    
        
    <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>cn.baidu.maven</groupid>
    <artifactid>maven-crm</artifactid>
    <version>0.0.1-snapshot</version>
    <packaging>war</packaging>
    <name>web工程,包括jsp、action等</name>
    <description>web工程,包括jsp、action等</description>

      <!-- 为了确定每个框架的版本号 -->

  <!-- 锁定版本 -->
      <properties>
        <spring.version>4.2.4.release</spring.version>
        <struts2.version>2.3.24</struts2.version>
        <hibernate.version>5.0.7.final</hibernate.version>
        <slf4j.version>1.6.6</slf4j.version>
        <log4j.version>1.2.12</log4j.version>
        <shiro.version>1.2.3</shiro.version>
        <cxf.version>3.0.1</cxf.version>
        <c3p0.version>0.9.1.2</c3p0.version> 
        <mysql.version>5.1.6</mysql.version>
    </properties>
      <!-- 锁定版本,struts2-2.3.24、spring4.2.4、hibernate5.0.7 -->
    <dependencymanagement>
        <dependencies>
            <dependency>
                <groupid>org.springframework</groupid>
                <artifactid>spring-context</artifactid>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupid>org.springframework</groupid>
                <artifactid>spring-aspects</artifactid>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupid>org.springframework</groupid>
                <artifactid>spring-orm</artifactid>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupid>org.springframework</groupid>
                <artifactid>spring-test</artifactid>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupid>org.springframework</groupid>
                <artifactid>spring-web</artifactid>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupid>org.hibernate</groupid>
                <artifactid>hibernate-core</artifactid>
                <version>${hibernate.version}</version>
            </dependency>
            <dependency>
                <groupid>org.apache.struts</groupid>
                <artifactid>struts2-core</artifactid>
                <version>${struts2.version}</version>
            </dependency>
            <dependency>
                <groupid>org.apache.struts</groupid>
                <artifactid>struts2-spring-plugin</artifactid>
                <version>${struts2.version}</version>
            </dependency>

        </dependencies>
    </dependencymanagement>
  
  <dependencies>
      <dependency>
            <groupid>org.apache.httpcomponents</groupid>
            <artifactid>httpclient</artifactid>
            <version>4.4</version>
        </dependency>
        <dependency>
            <groupid>com.alibaba</groupid>
            <artifactid>fastjson</artifactid>
            <version>1.1.37</version>
        </dependency>
        <dependency>
            <groupid>commons-beanutils</groupid>
            <artifactid>commons-beanutils</artifactid>
            <version>1.9.1</version>
        </dependency>
        <!-- <dependency>
            <groupid>org.quartz-scheduler</groupid>
            <artifactid>quartz</artifactid>
            <version>2.2.1</version>
        </dependency> -->
        <dependency>
          <groupid>commons-fileupload</groupid>
          <artifactid>commons-fileupload</artifactid>
          <version>1.3.1</version>
        </dependency>
    
        <!-- jstl -->
         <dependency>
          <groupid>jstl</groupid>
          <artifactid>jstl</artifactid>
          <version>1.2</version>
        </dependency>
        
        <!-- shiro -->
         <!-- apache shiro dependencies -->
         <!-- <dependency>
            <groupid>org.apache.shiro</groupid>
            <artifactid>shiro-all</artifactid>
            <version>${shiro.version}</version>
         </dependency> -->

      
       <!-- spring -->
        <dependency>
            <groupid>org.aspectj</groupid>
            <artifactid>aspectjweaver</artifactid>
            <version>1.6.8</version>
        </dependency>
        
         <dependency>
            <groupid>org.springframework</groupid>
            <artifactid>spring-aop</artifactid>
            <version>${spring.version}</version>
        </dependency>
        
        <dependency>
          <groupid>org.springframework</groupid>
          <artifactid>spring-context</artifactid>
          <version>${spring.version}</version>
        </dependency>
        
        <dependency>
          <groupid>org.springframework</groupid>
          <artifactid>spring-context-support</artifactid>
          <version>${spring.version}</version>
        </dependency>
        
        <dependency>
          <groupid>org.springframework</groupid>
          <artifactid>spring-web</artifactid>
          <version>${spring.version}</version>
        </dependency>

        <dependency>
          <groupid>org.springframework</groupid>
          <artifactid>spring-orm</artifactid>
          <version>${spring.version}</version>
        </dependency>
        
        <dependency>
          <groupid>org.springframework</groupid>
          <artifactid>spring-beans</artifactid>
          <version>${spring.version}</version>
        </dependency>
        
        <dependency>
          <groupid>org.springframework</groupid>
          <artifactid>spring-core</artifactid>
          <version>${spring.version}</version>
        </dependency>
        
    
        
        <!-- struts2  begin -->
        <dependency>
            <groupid>org.apache.struts</groupid>
            <artifactid>struts2-core</artifactid>
            <version>${struts2.version}</version>
            <exclusions>
                <exclusion>
                    <artifactid>javassist</artifactid>
                    <groupid>javassist</groupid>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupid>org.apache.struts</groupid>
            <artifactid>struts2-spring-plugin</artifactid>
            <version>${struts2.version}</version>
        </dependency>
        <dependency>
            <groupid>org.apache.struts</groupid>
            <artifactid>struts2-json-plugin</artifactid>
            <version>${struts2.version}</version>
        </dependency>
        <dependency>
              <groupid>org.apache.struts</groupid>
              <artifactid>struts2-convention-plugin</artifactid>
              <version>${struts2.version}</version>
          </dependency>
        <!-- struts2  end -->
        
        <!-- hibernate begin -->
        <dependency>
            <groupid>org.hibernate</groupid>
            <artifactid>hibernate-core</artifactid>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupid>org.hibernate</groupid>
            <artifactid>hibernate-entitymanager</artifactid>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupid>org.hibernate</groupid>
            <artifactid>hibernate-validator</artifactid>
            <version>5.2.1.final</version>
        </dependency>
        <!-- hibernate end -->
        
        <dependency>
              <groupid>c3p0</groupid>
              <artifactid>c3p0</artifactid>
              <version>${c3p0.version}</version>
          </dependency>
        
        <!-- <dependency> 
            <groupid>org.apache.cxf</groupid> 
            <artifactid>cxf-rt-frontend-jaxws</artifactid> 
            <version>${cxf.version}</version> 
        </dependency> 
        <dependency> 
            <groupid>org.apache.cxf</groupid> 
            <artifactid>cxf-rt-transports-http</artifactid> 
            <version>${cxf.version}</version> 
        </dependency> -->
        
        <!-- log start -->
        <dependency>
            <groupid>log4j</groupid>
            <artifactid>log4j</artifactid>
            <version>${log4j.version}</version>
        </dependency>
        
        <dependency>
            <groupid>org.slf4j</groupid>
            <artifactid>slf4j-api</artifactid>
            <version>${slf4j.version}</version>
        </dependency>
        
        <dependency>
            <groupid>org.slf4j</groupid>
            <artifactid>slf4j-log4j12</artifactid>
            <version>${slf4j.version}</version>
        </dependency>
        <!-- log end -->
        
        <!-- javamail -->
    <!--     <dependency>
          <groupid>javax.mail</groupid>
          <artifactid>mail</artifactid>
          <version>1.4.4</version>
        </dependency> -->
        
        <dependency>
            <groupid>commons-lang</groupid>
            <artifactid>commons-lang</artifactid>
            <version>2.6</version>
        </dependency>
    
        <!-- <dependency>
            <groupid>org.codehaus.xfire</groupid>
            <artifactid>xfire-core</artifactid>
            <version>1.2.6</version>
        </dependency>  -->
        
        <dependency>
           <groupid>dom4j</groupid>
           <artifactid>dom4j</artifactid>
           <version>1.6</version>
        </dependency>
    
        <!-- <dependency> 
            <groupid>org.apache.poi</groupid> 
            <artifactid>poi</artifactid> 
            <version>3.11</version> 
        </dependency>
        <dependency> 
            <groupid>org.apache.poi</groupid> 
            <artifactid>poi-ooxml</artifactid> 
            <version>3.11</version> 
        </dependency>
        <dependency> 
            <groupid>org.apache.poi</groupid> 
            <artifactid>poi-ooxml-schemas</artifactid> 
            <version>3.11</version> 
        </dependency> -->
    
       
       
        <dependency>
            <groupid>mysql</groupid>
            <artifactid>mysql-connector-java</artifactid>
            <version>${mysql.version}</version>
        </dependency>
       <!--  <dependency>
            <groupid>com.oracle</groupid>
            <artifactid>ojdbc14</artifactid>
            <version>10.2.0.4.0</version>
        </dependency> -->
        <dependency>
            <groupid>javax.servlet</groupid>
            <artifactid>servlet-api</artifactid>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupid>javax.servlet.jsp</groupid>
            <artifactid>jsp-api</artifactid>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupid>net.sf.ehcache</groupid>
            <artifactid>ehcache-core</artifactid>
            <version>2.6.6</version>
        </dependency>
  </dependencies>
  
   <build>
     
    <pluginmanagement>
        <plugins>
            <plugin>
                <groupid>org.apache.maven.plugins</groupid>
                <artifactid>maven-compiler-plugin</artifactid>
                <version>3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>utf-8</encoding>
                    <showwarnings>true</showwarnings>
                </configuration>
            </plugin>
        </plugins>
    </pluginmanagement>
  </build>
  
    <!-- parnet节点指定子模块的 父工程的坐标信息 -->
  <parent>
    <groupid>cn.baidu</groupid>
    <artifactid>ssh_maven</artifactid>
    <version>0.0.1-snapshot</version>
  </parent>
  
  
  <artifactid>ssh_dao</artifactid>
  
  <dependencies>
      <dependency>
          <groupid>junit</groupid>
          <artifactid>junit</artifactid>
          <version>4.10</version>
          <scope>test</scope>
      </dependency>
  </dependencies>
  <!-- 上传jar包使用命令  deploey部署到私服 后本地仓库会不会有  -->
  <distributionmanagement>
      <repository>
          <id>releases</id>
    <url>http://localhost:8081/nexus/content/repositories/releases/</url>
      </repository> 
      <snapshotrepository>
          <id>snapshots</id>
    <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
      </snapshotrepository> 
  </distributionmanagement>
  
</project>
    
    applicationcontext-dao.xml
        <?xml version="1.0" encoding="utf-8"?>
        <beans xmlns="http://www.springframework.org/schema/beans"
            xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
            xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
            xsi:schemalocation="
                http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
                http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
            <!-- datasource数据源 -->
            <bean id="datasource" class="com.mchange.v2.c3p0.combopooleddatasource">
                <property name="driverclass" value="com.mysql.jdbc.driver"></property>
                <property name="jdbcurl" value="jdbc:mysql:///maven_ssh"></property>
                <property name="user" value="root"></property>
                <property name="password" value="root"></property>
            </bean>
            <!-- seesionfactory -->
            <bean id="sessionfactory" class="org.springframework.orm.hibernate5.localsessionfactorybean">
                <!-- 数据源 -->
                <property name="datasource" ref="datasource"></property>
                <!-- hibernate的配置 --><!-- 实体类映射 -->
                <property name="configlocations" value="classpath:hibernate.cfg.xml"></property>
            </bean>
            <!-- 事务的管理器 -->
            <bean id="transactionmanager" class="org.springframework.orm.hibernate5.hibernatetransactionmanager">
                <property name="sessionfactory" ref="sessionfactory"></property>
            </bean>
            <!-- 事务的通知 -->
            <tx:advice id="txadvice" >
                <tx:attributes>
                    <tx:method name="save*" propagation="required"/>
                    <tx:method name="update*" propagation="required"/>
                    <tx:method name="delete*" propagation="required"/>
                    <tx:method name="find*" read-only="true"/>
                </tx:attributes>
            </tx:advice>
            <!-- 切面配置 -->
            <aop:config>
                <!-- 切入点配置 -->
                <aop:pointcut expression="execution(* cn.baidu.service.*.*(..))" id="pointcut"/>
                <aop:advisor advice-ref="txadvice" pointcut-ref="pointcut"/>
            </aop:config>
            <!-- 自己的持久层dao -->
            <bean id="customerdao" class="cn.baidu.dao.impl.customerdaoimpl">
                <property name="sessionfactory" ref="sessionfactory"></property>
            </bean>
            
        </beans>