本文共--字 阅读约--分钟 | 浏览: --
在marketplace 下载 Maven Archetype Catalogs 并重启,重建project的时候选Maven的时候就会有更多的Archetype选择。
复制一份示例的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 ....