spring6项目搭建(入门)

文章目录

  • 环境要求
  • 构建模块
  • 引入依赖
  • 初试Bean
  • 创建测试类测试
  • 对象实现的原理

环境要求

  • JDK:Java17+(Spring6要求JDK最低版本是Java17)

  • Maven:3.6+

  • Spring:6.0.2

构建模块

首先建立的spring的项目(project),项目下面有一些子模块(module)

(1)在idea中,依次单击 File -> New -> Project -> New Project
spring6项目搭建(入门)_第1张图片
删除src目录
(2)构建子模块pro1
spring6项目搭建(入门)_第2张图片
点击 Create 完成
spring6项目搭建(入门)_第3张图片

引入依赖

这个依赖加到父工程的spring6下面的pom.xml
,然后后面的子工程就可以不在导入这个包了

<dependencies>
    
    
    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-contextartifactId>
        <version>6.0.2version>
    dependency>

    
    <dependency>
        <groupId>org.junit.jupitergroupId>
        <artifactId>junit-jupiter-apiartifactId>
        <version>5.3.1version>
    dependency>
dependencies>

初试Bean

1.创建java类HelloWorld
spring6项目搭建(入门)_第4张图片

package com.test;

/**
 * ClassName: HelloWorld
 * Package: com.test
 * Description:
 *
 * @Author Thmiao
 * @Create 2023/10/11 19:33
 * @Version 1.0
 */
public class HelloWorld {

    public HelloWorld() {
        System.out.println("这个是一个无参的构造方法!!");
    }

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

2.创建配置文件
依赖导入了之后,写配置文件
spring6项目搭建(入门)_第5张图片

<?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">


    <!--
   配置HelloWorld所对应的bean,即将HelloWorld的对象交给SpringIOC容器管理
   通过bean标签配置IOC容器所管理的bean
   属性:
       id:设置bean的唯一标识
       class:设置bean所对应类型的全类名
   -->
    <bean id="helloWorld" class="com.test.HelloWorld"></bean>
</beans>

创建测试类测试

在test 下面建立测试类
spring6项目搭建(入门)_第6张图片

import com.test.HelloWorld;

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


public class HelloTest {
    @Test
    void test(){
        ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
        HelloWorld HI = (HelloWorld) ac.getBean("helloWorld");
        HI.sayHello();
    }

    @Test
    void testRefection() throws Exception {
        Class clazz = Class.forName("com.test.HelloWorld");
        // 这个也可以获取到helloWord的类对象,只是这个方法过时了
//        HelloWorld o = (HelloWorld)clazz.newInstance();
//        o.sayHello();
        HelloWorld hello = (HelloWorld) clazz.getDeclaredConstructor().newInstance();
        hello.sayHello();
    }
    private Logger logger = LoggerFactory.getLogger(HelloTest.class);


这里写了两个测试方法,第一个test 方法是试的spring下得ioc
第二个testRefection 是为了自己写反射来实现获取bean (实例对象)对象

运行结果:(第一个方法的)
spring6项目搭建(入门)_第7张图片

注意:创建对象时确实调用了无参数构造方法。

对象实现的原理

ean对象最终存储在spring容器中,在spring源码底层就是一个map集合,存储bean的map在DefaultListableBeanFactory类中:

private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);

Spring容器加载到Bean类时 , 会把这个类的描述信息, 以包名加类名的方式存到beanDefinitionMap 中,
Map , 其中 String是Key , 默认是类名首字母小写 , BeanDefinition , 存的是类的定义(描述信息) , 我们通常叫BeanDefinition接口为 : bean的定义对象。

你可能感兴趣的:(spring6,java)