目录

  • 一、使用Spring管理Bean
  • 1.1 创建java工程,导入Spring jar包
  • 1.1.1 Spring 核心jar包:
  • 1.1.2 其他依赖的jar包:
  • 1.2 创建相关Bean与配置文件
  • 1.2.1 创建Student类
  • 1.2.2 创建Spring配置文件(applicationContext.xml)
  • 1.2.2 创建测试类
  • 1.2.3 控制台输出
  • 二、 获取Bean的几种形式
  • 2.1 **ac.getBean(Student.class)**:通过类型获取容器中的对象。
  • 2.2 **ac.getBean("student")**:通过标签的id获取对象,获取出的对象是Object类型,需要强转。
  • 2.3 **ac.getBean("s1",Student.class)**:通过Bean的Id、类型获取容器中的对象。


一、使用Spring管理Bean

1.1 创建java工程,导入Spring jar包

spring 整合 doris spring 整合jco_spring 整合 doris

1.1.1 Spring 核心jar包:
spring-beans-4.0.0.RELEASE.jar            Spring IOC的核心
spring-context-4.0.0.RELEASE.jar          Spring为了扩展其他功能
spring-core-4.0.0.RELEASE.jar             Spring的核心
spring-expression-4.0.0.RELEASE.jar       Spring表达式
1.1.2 其他依赖的jar包:
commons-logging-1.1.3.jar               Spring框架中依赖的日志包

这些都是Spring必须导入的jar包。

1.2 创建相关Bean与配置文件

1.2.1 创建Student类
package com.wyl.spring;

public class Student {
    private Integer sid;
    private String sname;

    public Student() {
    }

    public Integer getSid() {
        return sid;
    }

    public void setSid(Integer sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                '}';
    }
}
1.2.2 创建Spring配置文件(applicationContext.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">
       
    <!--将创建好的类,交给Spring管理 -->
    <bean id="student" class="com.wyl.spring.Student"></bean>
    
</beans>

Bean标签:需要让Spring管理的类,都需要配置在Bean标签中
id:在Spring容器中为当前类指定一个唯一标识
class:指定Spring需要管理类的全类名

1.2.2 创建测试类
package com.wyl.spring;

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

public class SpringBeanTest {
    public static void main(String[] args) {
        // 1.创建IOC容器,并指定配置文件位置
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 2.从IOC容器中获取管理的对象
        Student bean = ac.getBean(Student.class);
        // 3.输出验证
        System.out.println(bean);
    }
}
1.2.3 控制台输出
五月 31, 2020 2:15:22 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1099f62: startup date [Sun May 31 14:15:22 CST 2020]; root of context hierarchy
五月 31, 2020 2:15:22 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applicationContext.xml]

Student{sid=null, sname='null'}

Student{sid=null, sname=‘null’} 可以看出获取到了Student对象,只不过属性没有赋值。

二、 获取Bean的几种形式

2.1 ac.getBean(Student.class):通过类型获取容器中的对象。

// 2.从IOC容器中获取管理的对象
        Student bean = ac.getBean(Student.class);

如果容器中有两个或以上相同类型的Bean就会报NoUniqueBeanDefinitionException(没有唯一的Bean)异常。

<!--将创建好的对象,交给Spring管理 -->
    <bean id="student" class="com.wyl.spring.Student"></bean>
    <!--再配置一个同类型、不同名的Bean-->
    <bean id="student2" class="com.wyl.spring.Student"></bean>
Exception in thread "main" org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.wyl.spring.Student] is defined: expected single matching bean but found 2: student,student2
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:312)
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:985)
	at com.wyl.spring.SpringBeanTest.main(SpringBeanTest.java:11)

2.2 ac.getBean(“student”):通过标签的id获取对象,获取出的对象是Object类型,需要强转。

// 2.从IOC容器中获取管理的对象
        Student bean = (Student) ac.getBean("student");

如果容器中有两个或以上id相同、类型不同的Bean也会报异常,因为是按照id匹配获取对象的。

<!--将创建好的对象,交给Spring管理 -->
    <bean id="s1" class="com.wyl.spring.Student"></bean>
    <!--再创建一个同名、不同类型的Bean -->
    <bean id="s1"  class="java.lang.String"></bean>
Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Bean name 's1' is already used in this <beans> element
Offending resource: class path resource [applicationContext.xml]

2.3 ac.getBean(“s1”,Student.class):通过Bean的Id、类型获取容器中的对象。

// 2.从IOC容器中获取管理的对象
    Student bean = ac.getBean("s1",Student.class);

获取容器中id是s1并且类型是Student的对象。

<!--将创建好的对象,交给Spring管理 -->
    <bean id="s1" class="com.wyl.spring.Student"></bean>
    <!--再创建一个同名、不同类型的Bean -->
    <bean id="s2"  class="java.lang.String"></bean>

如果从容器中获取不到对象(没有加入到容器中管理),就会抛出NoSuchBeanDefinitionException异常。

Student bean = ac.getBean("s21",Student.class);
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 's21' is defined