Spring框架—IOC简单案例

一、使用Spring管理Bean

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

在这里插入图片描述

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值