Note19

本文共--字 阅读约--分钟 | 浏览: --

下载archetype插件

在marketplace 下载 Maven Archetype Catalogs 并重启,重建project的时候选Maven的时候就会有更多的Archetype选择。

修改maven镜像

复制一份示例的maven的settings.xml (/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/conf/settings.xml)

复制到 /Users/upcccz/.m2 中 创建 settings.xml

在xml中添加mirror配置

<mirrors>
  <mirror>
    <id>alimaven</id>
    <mirrorOf>*</mirrorOf>
    <name>aliyun maven</name>
    <url>https://maven.aliyun.com/repository/public</url>
  </mirror>
</mirrors>
<!-- 地址到ailiyun官网去找 https://developer.aliyun.com/mvn/guide -->

进行配置的override 设置里面的 maven User settings file

入门案例

创建父工程 new project -> maven

创建子模块 new module -> maven parent 指向 父工程

引入spring 相关依赖 子模块的 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>spring6</artifactId>
        <groupId>com.upcccz</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-first</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>

    <!-- 下面两个 -->

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.2</version>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.6.3</version>
        </dependency>
    </dependencies>

</project>

更新maven依赖

创建类,定义属性和方法

package com.upcccz.spring6;

public class User {

  public User() {
    System.out.println("无参数构造函数执行了");
  }

  public void add() {
    System.out.println("add ....");
  }
}

按照spring要求创建配置文件 子模块目录中的 resource/bean.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 完成user对象的创建 id 唯一标识 class属性 要创建对象所在类的全路径 -->
    <bean id="user" class="com.upcccz.spring6.User"></bean>
</beans>

进行最终测试

package com.upcccz.spring6;

import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.lang.reflect.InvocationTargetException;

public class TestUser {

  @Test
  public void testUserObject() {
    // 1、加载spring配置文件,对象创建
    ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");

    // 如何使用反射创建的对象
    // 1) 加载bean.xml文件并解析
    // 2)  获取 bean标签中的属性值 id 和 class
    // 3) 使用反射根据类全路径创建对象 如下面的 testReflect 即 Spring底层就是类似做法

    // 2、创建的对象放在哪了
    // /Users/upcccz/.m2/repository/org/springframework/spring-beans/6.0.2/spring-beans-6.0.2-sources.jar!/org/springframework/beans/factory/support/DefaultListableBeanFactory.java
    // private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);
    // key: 唯一标识 id="user"
    // value: 类的定义(描述信息)

    // 3、获取创建的的对象 name就xml文件的对应的id  默认是一个Object 需要强转
    User user = (User) context.getBean("user");
    System.out.println(user);

    // 使用对象调用方法进行测试
    user.add();
  }

  @Test
  public void testReflect() throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
    // 获取类Class对象
    Class aClass = Class.forName("com.upcccz.spring6.User");
    // 调用方法创建对象
    User user = (User) aClass.getDeclaredConstructor().newInstance();
    System.out.println(user);
  }
}

// 输出
// 无参数构造函数执行了
// com.upcccz.spring6.User@793be5ca
// add ....