【Spring】创建一个Spring项目与Bean对象的存储

目录

一、创建Spring项目

1、创建Maven项目

 2、配置maven国内源

 3、引入spring依赖

4、添加启动类

二、将Bean对象存储到Spring(IoC容器)

1、创建Bean对象

2、将Bean存储到spring(容器)中

3、获取Bean对象

3.1、ApplicationContext与BeanFactory的区别

3.2、getBean方法的更多用法(参数不同,用法不同) 

 4、总结


一、创建Spring项目

1、创建Maven项目

因为Spring项目是基于Maven的。这里小编使用的idea是社区版2021.3.2,使用的JDK是1.8。

【Spring】创建一个Spring项目与Bean对象的存储_第1张图片

【Spring】创建一个Spring项目与Bean对象的存储_第2张图片 

 2、配置maven国内源

1️⃣配置当前项目的maven国内源

【Spring】创建一个Spring项目与Bean对象的存储_第3张图片

【Spring】创建一个Spring项目与Bean对象的存储_第4张图片 

 找到setting.xml文件之后,添加maven国内阿里源

【Spring】创建一个Spring项目与Bean对象的存储_第5张图片

 如果你的电脑上已经存在settings.xml文件,你只需要将这个mirror添加到settings.xml文件中的mirrors标签中即可。


        alimaven
        aliyun maven
        http://maven.aliyun.com/nexus/content/groups/public/
        central        

2️⃣配置新项目的maven国内源

因为上述中已经在setting.mxl中添加了mirror,所以这里就直接勾选就可以,不用再配置settings.xml文件,通过这种方式配置了maven之后,之后创建了新的maven之后,就需要再配置了。

【Spring】创建一个Spring项目与Bean对象的存储_第6张图片

【Spring】创建一个Spring项目与Bean对象的存储_第7张图片

 


 3、引入spring依赖

在项目的pom.xml中添加Spring框架的支持,添加spring-context(spring上下文)和spring-beans(管理对象模块)。


        
            org.springframework
            spring-context
            5.2.3.RELEASE
        

        
            org.springframework
            spring-beans
            5.2.3.RELEASE
        
    

添加完成之后,出现了爆红,表示这些文件没有下载,点击左边的Maven之后,点击刷新。或者也可以直接点击刷新,在第一次添加依赖时,idea的左上角会出现一个小标签,点击刷新即可触发下载。

 【Spring】创建一个Spring项目与Bean对象的存储_第8张图片

 


4、添加启动类

最后在创建好的Java文件下创建一个启动类,包含main方法即可。

public class App {
     public static void main(String[] args) {
 
     }
}

二、将Bean对象存储到Spring(IoC容器)

1、创建Bean对象

比如我们创建一个UserService类,然后注入到spring中。这里所谓的Bean就是Java语言中的一个普通的类,一点点区别就是可能会被多次使用的对象叫做Bean

package com.zf.demo;

public class UserService {
    public void func(){
        System.out.println("hello UserService.");
    }
}

2、将Bean存储到spring(容器)中

这里首先需要在resource中创建一个spring-config.xml配置文件。

【Spring】创建一个Spring项目与Bean对象的存储_第9张图片

 配置内容如下:



   

然后Bean对象通过spring-config配置文件,注入到spring中,就是在配置文件中加入下面的一行代码。

这里id表示存储到容器中bean对象的名称,class表示的bean对象的路径(包名+类名)。这里只是进行了申明并没有真正的注入到spring中,只有使用到这个对象中的方法时,才会真正的被注入到spring中。


3、获取Bean对象

获取并使用Bean对象,首先我们需要得到spring上下文对象,因为对象都交给了spring管理,所以获取对象要从spring中获取,然后通过spring上下文,获取某个指定的Bean对象,然后使用

1️⃣使用ApplicationContext接口来获取spring上下文对象

这里需要使用ApplicationContext接口的实现类ClassPathXmlApplicationContext,并且需要指定配置文件,也就是我们刚刚创建的spring-config.xml文件。

import com.zf.demo.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) {
        //1、先得到Spring上下文对象(得到容器对象)
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        //2、得到Bean,这里使用依赖查找的方法
        UserService userService = (UserService) context.getBean("user");
        //3、使用Bean对象(非必须)
        userService.func();

    }
}

这里使用getBean方法进行依赖查找,这里方法中使用的参数需要和我们在spring-config.xml文件中id属性值相同。

2️⃣使用BeanFactory接口来获取上下文对象。

import com.zf.demo.Student;
import com.zf.demo.UserService;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

public class App2 {
    public static void main(String[] args) {
        //1、得到Spring 上下文对象(得到容器对象)
        BeanFactory context = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
        //2、获取Bean
         UserService userService = (UserService) context.getBean("user");
         //3、使用Bean
        userService.func();
    }
}

这个方式在实际中并不推荐使用,这个方式随着时代的发展已经过时了,之前由于电脑内存较小的情况下,需要考虑内存占用的问题,而现在并不需要考虑这些。

3.1、ApplicationContext与BeanFactory的区别

相同点

  • 都是容器管理对象,都可以获取Bean对象。

不同点

  • ApplicationContext属于BeanFactory的子类,BeanFactory提供了基础的访问容器的能力,而ApplicationContext不仅继承了BeanFactory的所有功能之外,它还拥有独有的特性,添加了对国际化的支持,资源访问支持,以及时间传播等方面的支持。
  • 他们的加载机制不同:BeanFactory是按需加载Bean,属于懒加载,使用它程序启动的时候非常快,但是需要获取Bean对象时就会慢一些;而ApplicationContext在启动的时候,会将所有的Bean对象加载完成,所以启动会较慢,但是获取对象的时候就非常快的。

✨ 这里我们通过两个Bean对象来了解他们启动时的加载机制。

1️⃣在创建一个student类,并且给两个类中都写一个构造方法其中写一个打印的方法,可以观察启动时对象有没有加载。

package com.zf.demo;

public class UserService {
    public UserService(){
        System.out.println("hello UserService Init.");
    }
    public void func(){
        System.out.println("hello UserService.");
    }
}
package com.zf.demo;

public class Student {
    public Student(){
        System.out.println("Student Init.");
    }
}

2️⃣然后将新创建的类,注入到spring中,也就是在spring-config.xml文件中配置bean.

【Spring】创建一个Spring项目与Bean对象的存储_第10张图片

3️⃣然后启动App类(使用ApplicationContext来获取上下问对象),App2类(使用BeanFactory来获取上下问对象)

【Spring】创建一个Spring项目与Bean对象的存储_第11张图片

【Spring】创建一个Spring项目与Bean对象的存储_第12张图片 


3.2、getBean方法的更多用法(参数不同,用法不同) 

1️⃣用法1:根据对象的名称来获取Bean对象

UserService userService = (UserService) context.getBean("User");

2️⃣用法2:根据类型获取Bean对象

  UserService userService = context.getBean(UserService.class);

 使用这种方式获取Bean对象,当Beans中只有一个类的实例是没有问题的,但是当有这个类的多个实例,就会产生问题。

【Spring】创建一个Spring项目与Bean对象的存储_第13张图片

通过上述方式来获取Bean对象 ,这里就报NoUniqueBeanDefinitionException异常,表示注入的对象不是唯一的。

【Spring】创建一个Spring项目与Bean对象的存储_第14张图片

3️⃣方式3:根据名称和类型来获取Bean对象

UserService userService = context.getBean("user",UserService.class);

这种获取Bean对象的方式,相比于第一种更加优雅,不需要使用强制类型转换。相比于第二种也不会出现方式2中的问题。

【Spring】创建一个Spring项目与Bean对象的存储_第15张图片

 4、总结

1️⃣首先是创建spring项目

2️⃣存对象

  • 创建普通类
  • 然后将普通类配置到spring-config.xml文件中,也就是注入到spring容器中

3️⃣取对象

  • 得到spring上下文,并读取spring的配置文件
  • 获取某个Bean对象
  • 使用Bean对象

img

 

 

你可能感兴趣的:(Spring,spring,数据库,java)