目录

1、创建Spring项目

1.1、创建一个Maven项目

 1.2、添加Spring框架支持

1.3、添加启动类

2、存储Bean对象

2.1、创建Bean对象

2.2、将Bean对象注册到Spring容器中

3、获取、使用Bean对象

3.1、得到Spring上下文对象

使用ApplicationContext作为Spring的上下文 【更常用】

使用 BeanFactory作为Spring的上下文

面试题:ApplicationContext   VS  BeanFactory

3.2、通过Spring上下文,获取某一个指定的对象【3种方式】 

3.3、使用Bean对象


1、创建Spring项目

三步即可搞定:

1.1、创建一个Maven项目

使用spring实现创建者模式 spring创建的对象放到哪里了_spring

 1.2、添加Spring框架支持

在pom.xml中添加:

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
    </dependencies>

添加依赖,加载时间可能需要一点时间,耐心等待哈

1.3、添加启动类

在java文件下创建启动类即可:

使用spring实现创建者模式 spring创建的对象放到哪里了_使用spring实现创建者模式_02


2、存储Bean对象

存入,需要先有这么个对象,才能谈到存呀~

2.1、创建Bean对象

Bean对象就是Java中一个普通对象而已啦~

例:

public class User {
    public void Hello() {
        System.out.println("hello world");
    }
}

2.2、将Bean对象注册到Spring容器中

添加配置文件,并且要以resources为根目录:

使用spring实现创建者模式 spring创建的对象放到哪里了_spring_03

 该文件下,添加如下内容:

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

如果爆红,刷新一下即可~

接下来就是正式存储Bean对象,具体操作:

在<beans>中添加如下代码:

<bean id="user" class="User"></bean>

这里的class值需要对应:

使用spring实现创建者模式 spring创建的对象放到哪里了_java_04

 

包名1.包名2.类名


3、获取、使用Bean对象

3.1、得到Spring上下文对象

Spring上下文是什么?其实就是Spring本身 

使用ApplicationContext作为Spring的上下文 【更常用】

        因为对象都交给Spring管理了,所以获取对象对象要从Spring中获取,那就得先得到Spring的上下文

ApplicationContext context = new ClassPathXmlApplicationContext("Spring.xml");

括号里填什么呢?

使用spring实现创建者模式 spring创建的对象放到哪里了_spring_05

 

使用 BeanFactory作为Spring的上下文

BeanFactory context = new XmlBeanFactory(new ClassPathResource("Spring.xml"));

二者的效果是一样的

面试题:ApplicationContext   VS  BeanFactory

相同点:

  • 都可以得到Spring上下文对象
  • 都是来自Spring的顶级接口

不同点:

  • 继承关系:ApplicationContext   属于 BeanFactory 的子类
  • 功能:BeanFactory只有最基础的访问Bean的能力,但是ApplicationContext除了有BeanFactory功能以外,还包含了自己独有的功能,如:国际化支持、资源访问、事件传播等
  • 性能方面的区别:ApplicationContext 加载方式是将Bean对象一次性加载,后期访问Bean对象时就会很快,BeanFactory需要某个Bean时,采用加载Bean对象,所以它在执行Bean获取时,比较慢

3.2、通过Spring上下文,获取某一个指定的对象【3种方式】 

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class Test {
    public static void main(String[] args) {
        //1、得到Spring的上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("Spring.xml");

        //2、加载某个Bean
        //方法一:
        User user = (User) context.getBean("user");//根据bean的名称【标识】

        //方法二:
        //不用强转了
        // User user1 = context.getBean(User.class);//根据bean类型获取bean

        //方法三:
        User user2 = context.getBean("user",User.class);//根据bean名称加上bean对象/类型

        //3、调用相应的方法
        user.Hello();
        //user1.Hello();
        user2.Hello();
    }
}

方法二中,为什么把他注释了呢?因为咱们在Spring.xml中,是这样写滴:

 

使用spring实现创建者模式 spring创建的对象放到哪里了_使用spring实现创建者模式_06

        一个类,引入了两次,当它加载时,他就不知道加载哪个【一个类,每注入一次,都是不一样的,可以自己去敲代码,看看user和user1是否相等】 ,当我们只注入一次时,当然是可以使用方法二的

        最优方法是方法三,没有了方法一的强转【可能会带来问题】,也不会产生方法二的弊端

 

注意:Id需要一致:

使用spring实现创建者模式 spring创建的对象放到哪里了_使用spring实现创建者模式_07

 

 

3.3、使用Bean对象

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class Test {
    public static void main(String[] args) {
        //1、得到Spring的上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("Spring.xml");

        //2、加载某个Bean
        User user = (User) context.getBean("user");

        //3、调用相应的方法
        user.Hello();
    }
}

使用spring实现创建者模式 spring创建的对象放到哪里了_spring_08

咱们下期见咯~