Maven入门详解与安装配置

Maven:

Maven出现前的问题:

假设你现在做了一个项目,项目中肯定要用到一些jar包,比如说mybatis,log4j,JUnit等,除了这些之外,你有可能用到你的同事开发的其他的东西,比如说别人做了一个财务模块或做了一个结算的模块,你在这里边有可能要用到这些东西。假如有一天你们的项目中mybatis进行了一个升级,但是它内部使用的JUnit没有升级,你升级以后的mybatis假如要用5.0的JUnit,而你项目中目前用的是4.0的,会不会冲突?必然会出问题!这个时候管理起来会比较麻烦,你需要各种调整。更有甚者,假如同事做的这些东西升级了但又没有通知你,这个时候,就会出现几种严重的问题:

  1. jar包不统一,jar不兼容
  2. 工程升级维护过程操作繁琐

Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)

Maven通过加载pom.xml这个配置文件就可以知道我们项目的相关信息,如果我们做8个项目,对应的是1个文件,还是8个文件?肯定是8个!

Maven是如何帮我们进行项目资源管理的呢?

  • 通过依赖管理
  • 所谓依赖管理就是maven对项目所有依赖资源的一种管理,它和项目之间是一种双向关系,当我们做项目的时候maven的依赖管理可以帮助你去管理你所需要的其他资源,当其他的项目需要依赖我们项目的时候,maven也会把我们的项目当作一种资源去进行管理,这就是一种双向关系。

Maven的依赖管理资源存在哪儿呢?

  • 本地仓库私服、中央仓库
  • 本地仓库顾名思义就是存储在本地的一种资源仓库,如果本地仓库中没有相关资源,可以去私服上获取,私服也是一个资源仓库,只不过不在本地,是一种远程仓库,如果私服上也没有相关资源,可以去中央仓库去获取,中央仓库也是一种远程仓库。
  • Maven除了帮我们管理项目资源之外还能帮助我们对项目进行构建,管理项目的整个生命周期,当然它的这些功能需要使用一些相关的插件来完成,当然整个生命周期过程中插件是需要配合使用的,单独一个无法完成完整的生命周期。

Maven的作用:

  1. 项目构建:提供标准的,跨平台的自动化构建项目的方式
  2. 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突等问题
  3. 统一开发结构:提供标准的,统一的项目开发结构

在这里插入图片描述

各目录存放资源类型说明:

  • src/main/java:项目java源码
  • src/main/resources:项目的相关配置文件(比如mybatis配置,xml映射配置,自定义配置文件等)
  • src/main/webapp:web资源(比如html,css,js等)
  • src/test/java:测试代码
  • src/test/resources:测试相关配置文件
  • src/pom.xml:项目pom文件

Maven环境搭建:

maven的官网:http://maven.apache.org/
官方下载地址:http://maven.apache.org/download.cgi

maven各目录结构说明:

  • bin:可执行程序目录
  • boot:maven自身的启动加载器
  • conf:maven配置文件的存放目录
  • lib:maven运行所需库的存放目录

Win系统环境配置:

  1. 我的电脑-------->属性--------->高级系统设置---------->新建系统变量MAVEN_HOME
    在这里插入图片描述
    新建系统环境变量MAVEN_HOME然后输入maven所在的路径
    在这里插入图片描述

系统变量值就是maven软件的根目录

  1. 环境变量配置好之后需要测试环境配置结果,在DOS命令窗口下输入以下命令查看输出,如果能够看到输出的maven的版本信息代表配置成功
mvn -v

MacOs系统配置:

官网下载:https://maven.apache.org/download.cgi

  1. 下载好将里面的apache-maven-3.6.1-bin.tar.gz解压到指定目录
  2. 找个方便的层级不深的目录新建文件夹,里面创建一个repository文件夹用作本地仓库,再把maven里conf下的settings.xml拷贝过来
  3. 然后编辑conf下的settings.xml配置文件(两个配置文件要一致),添加本地仓库和阿里镜像,放在<mirrors>里,本地仓库的随便放

全局settings与局部settings:

  • 全局settings:当前计算机中Maven公共配置
  • 局部settings:当前用户的配置(本地仓库就是局部的)

把settings文件里默认加的mirror标签注释掉,换成下面的阿里云的镜像在国内使用会快一点
在这里插入图片描述
换成下面这个

   <!-- 配置阿里云镜像 --><mirrors><mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror></mirrors><!-- 本地仓库 --><localRepository>这里写你的本地仓库路径,例:/Users/itzhuzhu/Desktop/Java/maven/repository</localRepository>
  1. 打开终端输入vim ~/.bash_profile添加maven路径信息,最后面两行就是
# maven配置
export MAVEN_HOME=/Users/itzhuzhu/Desktop/Java/maven/apache-maven-3.8.4
export PATH=$PATH:$MAVEN_HOME/bin
  1. 退出以后执行source .bash_profile刷新一下,然后输入mvn -v显示下面这样的就是配置成功
itzhuzhu@itzhuzhudeMacBook-Pro ~ % source .bash_profileitzhuzhu@itzhuzhudeMacBook-Pro ~ % mvn -v
Apache Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537)
Maven home: /Users/itzhuzhu/Desktop/Java/maven/apache-maven-3.8.4
Java version: 11.0.13, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk-11.0.13.jdk/Contents/Home
Default locale: zh_CN_#Hans, platform encoding: UTF-8
OS name: "mac os x", version: "10.16", arch: "x86_64", family: "mac"

仓库:

  • 仓库:用于存储资源,主要是各种jar包
  • 中央仓库:maven团队自身维护的仓库,里面所有的jar包都是开源的
  • 私服:各公司/部门等小范围内存储资源的仓库,私服也可以从中央仓库获取资源
    • 私服的作用:
    1. 保存具有版权的资源,包含购买或自主研发的jar
    2. 解决远程访问中中央仓库速度慢的问题
    3. 一定范围内共享资源,能做到仅对内不对外开放
    4. 本地获取私服的,私服有了就直接返回,没有的话才去中央仓库获取
  • 本地仓库:开发者自己电脑上存储资源的仓库,也可从远程仓库获取资源

在这里插入图片描述

坐标:

坐标:maven中的坐标用于描述仓库中资源的位置
https://repo1.maven.org/maven2/
maven坐标的作用:

使用唯一标识,唯一性定义资源位置,通过该标识可以将资源的识别与下载工作交由机器完成。

maven坐标的主要组成如下:

  • groupId:定义当前资源隶属组织名称(通常是域名反写,如:org.mybatis;com.itheima)

  • artifactId:定义当前资源的名称(通常是项目或模块名称,如:crm,sms)

  • version:定义当前资源的版本号

  • packaging:定义资源的打包方式,取值一般有如下三种

    1. jar:该资源打成jar包,默认是jar
    2. war:该资源打成war包
    3. pom:该资源是一个父资源(表明使用maven分模块管理),打包时只生成一个pom.xml不生成jar或其他包结构

如果要查询maven某一个资源的坐标,可以去maven的仓库进行查询,https://mvnrepository.com/,在该网站中可直接搜索想要的资源,然后就能得到该资源的坐标

maven构建命令:

maven的构建命令以mvn开头,后面添加功能参数,可以一次性执行多个命令,用空格分离,这些在idea不需要手动。

mvn compile:编译

  • 编译完成后在项目project-java下多了一个目录target,在这个目录下就存放的是maven编译好的一些东西和字节码文件

mvn clean:清理

  • 需要删除这些文件执行mvn clean命令即可,清理掉后target目录也就消失了

mvn test:测试

  • 其中产生的test-classes就是测试代码的字节码文件,surefire-reports是它产生的测试报告

mvn package:打包

  • 执行测试包中的测试程序,只需执行mvn test命令即可

mvn install:安装到本地仓库

  • 输出会发现mvn install命令执行的时候也会将前面的命令都执行一遍
  • maven是按照groupId/artifactId/version的结构在本地仓库进行存储

idea配置maven:

  1. 新建java项目选择maven
    在这里插入图片描述

  2. 新建web项目选择这个
    在这里插入图片描述

  3. 打开idea的设置搜索maven,然后修改下面三个地址就可以了
    在这里插入图片描述

  4. 创建好了以后检查maven工程的格式和依赖
    在这里插入图片描述

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/maven-v4_0_0.xsd"><!--指定pom模型的版本--><modelVersion>4.0.0</modelVersion><!--打包方式,web打wer包,java打jar包--><packaging>war</packaging><name>untitled2</name><!--组织名--><groupId>org.example</groupId><!--项目名--><artifactId>untitled2</artifactId><!--版本--><version>1.0-SNAPSHOT</version><!--设置当前工程所有依赖--><dependencies><!--具体的依赖--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency></dependencies><!--构建--><build><!--设置插件--><plugins><!--具体的插件--><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat-maven-plugin-it</artifactId><version>2.1</version></plugin></plugins></build></project>

检查maven是否可以下载:

经过我无数小时的报错我总结了报错原因大多数是以下几点:

  1. 标签的位置不对
  2. 使用的是远程仓库,导致下载不了,解决办法就是settings.xml加阿里镜像,要放在 标签里
  3. 配置本地仓库,两边的settings.xml文件要一致
  4. idea配置全局maven路径
  5. 在电脑上查找.m2的文件夹,直接给它全部干掉
  6. 再查找一下.lastUpdate这种文件,全部给它干掉

把下面常用的jar导入测试下载速度:

    <dependencies><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.12</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.3</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.12.0-rc1</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.12.0-rc1</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.0-rc1</version></dependency><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency><dependency><groupId>commons-pool</groupId><artifactId>commons-pool</artifactId><version>1.6</version></dependency><dependency><groupId>org.hamcrest</groupId><artifactId>hamcrest</artifactId><version>2.2</version></dependency><dependency><groupId>org.hamcrest</groupId><artifactId>hamcrest-all</artifactId><version>1.3</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.8.0</version></dependency><dependency><groupId>org.hamcrest</groupId><artifactId>hamcrest-library</artifactId><version>2.2</version></dependency><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.9.4</version></dependency><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.2</version></dependency><dependency><groupId>com.jolbox</groupId><artifactId>bonecp</artifactId><version>0.8.0.RELEASE</version></dependency><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache-core</artifactId><version>2.6.8</version></dependency><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.29</version></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>1.3.175</version></dependency><dependency><groupId>org.hsqldb</groupId><artifactId>hsqldb</artifactId><version>2.3.2</version></dependency><dependency><groupId>com.fasterxml.jackson.jaxrs</groupId><artifactId>jackson-jaxrs-xml-provider</artifactId><version>2.3.1</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.1.39</version></dependency><dependency><groupId>org.apache.tiles</groupId><artifactId>tiles-core</artifactId><version>2.2.2</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.tiles</groupId><artifactId>tiles-jsp</artifactId><version>2.2.2</version></dependency><dependency><groupId>org.apache.tiles</groupId><artifactId>tiles-servlet</artifactId><version>2.2.2</version></dependency><dependency><groupId>org.apache.tiles</groupId><artifactId>tiles-template</artifactId><version>2.2.2</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version><scope>provided</scope></dependency><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.1</version><scope>provided</scope></dependency><!-- spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>4.0.2.RELEASE</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.0.2.RELEASE</version><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-messaging</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-instrument</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-instrument-tomcat</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc-portlet</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-websocket</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>aopalliance</groupId><artifactId>aopalliance</artifactId><version>1.0</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.7.4</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-config</artifactId><version>3.2.2.RELEASE</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-web</artifactId><version>3.2.2.RELEASE</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-taglibs</artifactId><version>3.2.2.RELEASE</version></dependency><dependency><groupId>org.springframework.webflow</groupId><artifactId>spring-webflow</artifactId><version>2.3.2.RELEASE</version></dependency><dependency><groupId>org.glassfish.web</groupId><artifactId>javax.el</artifactId><version>2.2.3</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.2.5</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.2.2</version><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring-asm</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.6</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>1.7.6</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jul-to-slf4j</artifactId><version>1.7.6</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.1.1</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.1.1</version></dependency><dependency><groupId>org.logback-extensions</groupId><artifactId>logback-ext-spring</artifactId><version>0.1.1</version></dependency></dependencies>

Maven依赖管理:

依赖是指在当前项目中运行所需的jar,依赖配置的格式如下图

依赖传递:

依赖传递:

  1. 直接依赖:在当前项目中通过依赖配置建立的依赖关系
  2. 间接依赖:被依赖的资源如果依赖其他资源,则表明当前项目间接依赖其他资源
  3. 直接依赖和间接依赖其实也是一个相对关系

项目A想用项目B的东西,只需要把项目B的坐标加在pom文件里就可以了,如果项目B还用到了项目C的东西,在项目A也是可以用的

    <dependencies><!--项目2的坐标--><dependency><groupId>org.example</groupId><artifactId>maven01</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>

依赖传递的冲突问题:

在依赖传递过程中产生了冲突,我们有三种优先法则

  1. 路径优先:当依赖中出现相同资源时,层级越深,优先级越低,反之则越高
  2. 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖靠后的
  3. 特殊优先:当同级配置了相同资源的不同版本时,后配置的覆盖先配置的

可选依赖

optional标签,设为true,

作用:不想让别人知道自己用的maven用了什么就用可选

    <dependencies><dependency><groupId>org.example</groupId><artifactId>maven01</artifactId><version>1.0-SNAPSHOT</version><optional>true</optional></dependency></dependencies>

排除依赖:

exclusions,复制要排除的资源信息
作用:排除依赖指主动断开依赖的资源,被排除的资源无需执行版本,依赖传过来不想用,就加这个

    <dependencies><dependency><!--项目2的文件--><groupId>org.example</groupId><artifactId>maven01</artifactId><version>1.0-SNAPSHOT</version><optional>true</optional><exclusions><exclusion><groupId>junit</groupId><artifactId>junit</artifactId></exclusion></exclusions></dependency></dependencies>

依赖范围:

依赖的jar默认情况可以在任何地方可用,可以通过scope标签设定其作用范围

这里的范围主要是指以下三种范围

  1. 主程序范围有效(src/main目录范围内)
  2. 测试程序范围内有效(src/test目录范围内)
  3. 是否参与打包(package指令范围内)

此外:scope标签的取值有四种:compile,test,provided,runtime

这四种取值与范围的对应情况如下:

在这里插入图片描述

依赖范围的传递性:

在这里插入图片描述

Maven生命周期:

maven的构建生命周期描述的是一次构建过程经历了多少个事件

生命周期是运行的阶段,插件是为了支持声明周期存在,构建过程就是靠这俩的

  1. clean:清理工作

pre-clean:执行一些在clean之前的工作

clean:移除上一次构建产生的所有文件

post-clean:执行一些在clean之后立刻完成的工作

  1. default:核心工作,例如编译,测试,打包,部署等

执行test那就把test前面所有的都执行一遍,执行default就把default前面的都执行一遍,以此类推

在这里插入图片描述

  1. site:产生报告,发布站点等

pre-site:执行一些在生成站点文档之前的工作
site:生成项目的站点文档
post-site:执行一些在生成站点文档之后完成的工作,为部署做准备
site-deploy:将生成的站点文档部署到特定的服务器上

插件:

  • 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件
  • maven默认在各个生命周期上都绑定了预先设定的插件来完成相应功能
  • 插件还可以完成一些自定义功能

插件的配置方式如下:

            <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>2.4</version><executions><execution><goals><!-- 可以打多个包 --><goal>jar</goal><goal>test-jar</goal></goals><phase>generate-test-resources</phase></execution></executions></plugin></plugins>

在maven官网中有对插件的介绍:

http://maven.apache.org/plugins/index.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue生命周期与自定义组件

自定义组件&#xff1a; Element 组件其实就是自定义的标签。例如<el-button> 就是对<button>的封装。 本质上&#xff0c;组件是带有一个名字且可复用的 Vue 实例&#xff0c;完全可以自己定义。 定义格式&#xff1a; Vue.component(组件名称, {props:组件的属性…

Spring DI(依赖注入)

DI依赖注入 IoC&#xff08;Inversion Of Control&#xff09;控制翻转&#xff0c;Spring反向控制应用程序所需要使用的外部资源DI&#xff08;Dependency Injection&#xff09;依赖注入&#xff0c;应用程序运行依赖的资源由Spring为其提供&#xff0c;资源进入应用程序的方…

Spring注解开发入门教程

注解开发&#xff1a; 什么是驱动注解&#xff1f; 注解启动时使用注解的形式替代xml配置&#xff0c;将繁杂的spring配置文件从工程中彻底消除掉&#xff0c;简化书写 注解驱动的弊端 为了达成注解驱动的目的&#xff0c;可能会将原先很简单的书写&#xff0c;变的更加复杂XM…

Spring整合Mybatis和JUnit

Spring整合Mybatis&#xff1a; 注解整合MyBatis分析 业务类使用注解形式声明bean&#xff0c;属性采用注解注入建立独立的配置管理类&#xff0c;分类管理外部资源&#xff0c;根据功能进行分类&#xff0c;并提供对应的方法获取bean使用注解形式启动bean扫描&#xff0c;加载…

Java-NIO(三):直接缓冲区与非直接缓冲区

直接缓冲区与非直接缓冲区的概念&#xff1a;1&#xff09;非直接缓冲区&#xff1a;通过 static ByteBuffer allocate(int capacity) 创建的缓冲区&#xff0c;在JVM中内存中创建&#xff0c;在每次调用基础操作系统的一个本机IO之前或者之后&#xff0c;虚拟机都会将缓冲区的…

Spring IOC扫描器与注册器

核心接口&#xff1a; 组件扫描器&#xff1a; 开发过程中&#xff0c;需要根据需求加载必要的bean&#xff0c;排除指定bean 设定组件扫描加载过滤器&#xff1a; 名称&#xff1a;ComponentScan 类型&#xff1a;类注解 位置&#xff1a;类定义上方 作用&#xff1a;设置…

Spring AOP切入点与通知XML类型

AOP&#xff1a; AOP(Aspect Oriented Programing)面向切面编程&#xff0c;一种编程范式&#xff0c;隶属于软工范畴&#xff0c;指导开发者如何组织程序结构AOP弥补了OOP的不足&#xff0c;基于OOP基础之上进行横向开发 uOOP规定程序开发以类为主体模型&#xff0c;一切围绕对…

给iOS项目中添加图片,并通过UIImageView引用和显示该UIImage图片

【问题】 关于iOS/iPhone中的文件选择对话框&#xff0c;用于用户去选择图片等文件 过程中&#xff0c;问题转换为&#xff0c;需要给当前iOS项目中&#xff0c;添加一个图片。 类似于Windows开发中的资源文件&#xff0c;其中图片文件属于资源的一种。 并且&#xff0c;接着可…

AOP底层原理与注解配置详解

注解开发AOP制作步骤&#xff1a; 在XML格式基础上 导入坐标&#xff08;伴随spring-context坐标导入已经依赖导入完成开启AOP注解支持配置切面Aspect定义专用的切入点方法&#xff0c;并配置切入点Pointcut为通知方法配置通知类型及对应切入点Before 注解开发AOP注意事项&am…

MacOS Apple M1 安装ARM架构的JDK及动态切换版本

JDK下载安装&#xff1a; 咱就是说&#xff0c;ARM版本的JDK就是一个字&#xff0c;真特么快&#xff0c;想变快吗&#xff0c;赶紧下载叭&#xff01;&#xff01; 1、下载地址&#xff1a;https://www.azul.com/downloads/?packagejdk 筛选一下MacOS下ARM架构的JDK版本&…

梯度下降和EM算法,kmeans的em推导

I. 牛顿迭代法给定一个复杂的非线性函数f(x)&#xff0c;希望求它的最小值&#xff0c;我们一般可以这样做&#xff0c;假定它足够光滑&#xff0c;那么它的最小值也就是它的极小值点&#xff0c;满足f′(x0)0&#xff0c;然后可以转化为求方程f′(x)0的根了。非线性方程的根我…

Spring事务详解与使用

Spring事务核心对象 J2EE开发使用分层设计的思想进行&#xff0c;对于简单的业务层转调数据层的单一操作&#xff0c;事务开启在业务层或者数据层并无太大差别&#xff0c;当业务中包含多个数据层的调用时&#xff0c;需要在业务层开启事务&#xff0c;对数据层中多个操作进行组…

黑马程序员博学谷Java就业班课程

1、资料全无加密&#xff0c;可任意试看 2、内容包括课程资料 地址:https://www.boxuegu.com/class/outline-1112.html

设计模式一の设计模式详解

一、设计模式定义 设计模式&#xff08;Design Pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的&#xff1a;为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化&#xff1b;…

Spring模板对象

Spring模块对象: 把共性的方法抽取出来固定为一个模板&#xff0c;后续再操作只需要填充内容即可。 比如&#xff1a;淘宝每次买东西都要填写地址&#xff0c;只是每次买的东西不一样&#xff0c;所以可以做一个默认地址&#xff0c;每次买东西都要去选商品就行了&#xff0c;不…

SpringMVC入门案例

SpringMVC 概述&#xff1a; SpringMVC是一种基于Java实现MVC模型的轻量级Web框架 三层架构 表现层&#xff1a;负责数据展示业务层&#xff1a;负责业务处理数据层&#xff1a;负责数据操作 MVC&#xff08;Model View Controller&#xff09;&#xff1a;一种用于设计创建…

SpringMVC请求中的普通、POJO、数组集合类型传参与类转换器

SpringMVC将传递的参数封装到处理器方法的形参中&#xff0c;达到快速访问参数的目的。 普通类型参数传参 参数名与处理器方法形参名保持一致 访问URL&#xff1a; http://localhost/requestParam1?nameitzhuzhu&age14 RequestMapping("/requestParam1")publi…

SpringMVC-HandlerInterceptor拦截器的使用与参数详解

拦截器概念&#xff1a; 拦截器&#xff08; Interceptor&#xff09;是一种动态拦截方法调用的机制&#xff0c;请求处理过程解析核心原理&#xff1a; AOP思想拦截器链&#xff1a;多个拦截器按照一定的顺序&#xff0c;对原始被调用功能进行增强 作用&#xff1a; 在指定的…

使用FindBugs-IDEA插件找到代码中潜在的问题

另一篇使用文档&#xff0c;参照&#xff1a;https://www.cnblogs.com/huaxingtianxia/p/6703315.html 我们通常都会在APP上线之后,发现各种错误,尤其是空指针异常,这些错误对于用户体验来说是非常不好的,但其实大部分的问题,我们都能够提前发现. 在编写代码的过程中,可能不会时…

霍炬:再谈百度:KPI、无人机,以及一个必须给父母看的案例

霍炬&#xff1a;再谈百度&#xff1a;KPI、无人机&#xff0c;以及一个必须给父母看的案例 作者&#xff1a;霍炬。 原文链接&#xff1a;http://www.donews.com/idonews/article/8147.shtm没想到我之前的一篇关于百度的文章引起了这么大的反馈。非常多朋友称赞我写的好&…