美文网首页
Spring5(2) - IOC容器(1)

Spring5(2) - IOC容器(1)

作者: 小白201808 | 来源:发表于2018-09-16 11:02 被阅读7次

IOC容器(1)

BeanFactory
ApplicationContext
bean的创建时期

spring Ioc容器(container)
BeanFactory:Spring最底层的接口,值提供了IOC功能,负责创建,组装,管理bean

在应用中,一般不使用Beanfactory,而推荐使用ApplicationContext(应用上下文)

ApplicationContext接口继承了BeanFactory,除此之外,还提供了AOP集成,国际化处理,事件传播,统一资源价值等功能

bean的创建时间
1.BeanFactory需要等到获取一个bean的时候才会去创建bean ---延迟初始化
2.ApplicationContext在启动spring容器时就会创建所有的bean(Web应用推荐)。

代码应用

(1) person类

package com.keen.container;

public class Person {
    
    public Person() {
        System.out.println("constractor Person....");
    }

}

(2)配置文件

<?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">
 
 <bean id = "person" class ="com.keen.container.Person"/>
</beans>

(3)测试

package com.keen.container;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

public class ContainerTest {
     //目的是得到spring 容器帮我们创建的person对象
    //1.使用beanFactory测试
    @Test
    void testBeanFactory() throws Exception {
        Resource resource = new ClassPathResource("com/keen/container/container.xml");
        //我们的最终目的是得到BeanFactory对象
        BeanFactory factory =new XmlBeanFactory(resource); 
        System.out.println("************************");
        Person p = factory.getBean("person",Person.class);
        System.out.println(p);
    }
    /*运行结果:
        ************************
        constractor Person....
        com.keen.container.Person@3c0a50da
     结论:BeanFactory有延迟初始化的特点,在构建Spring容器时,
     它不会立马去创建容器中的bean对象,而是要等到从容器中获取对象的时候,
     才去创建对象。
     */
    
    //2.使用ApplicationContext测试
    @Test
    void testName() throws Exception {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("com/keen/container/container.xml");
        System.out.println("************************");
        Person p = ctx.getBean("person",Person.class);
        System.out.println(p);
    }
    /*运行结果:
        constractor Person....
        ************************
        com.keen.container.Person@56a6d5a6
        
        结论:在创建Spring容器的时候,就会把容器中管理的bean立马初始化
        而不会等到获取bean的时候才去初始化。
     */
}

(4)我们的另外一种测试方法:Spring测试

package com.keen.container;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;

@SpringJUnitConfig
public class ContainerSpringTest {
    @Autowired //完成设置和注入容器对象
    private Person person;

    //Autowired 注释不仅可以帮我们注入容器中的对象, 还可以注入容器对象

    @Autowired
    private BeanFactory beanfactory;

    @Autowired
    private ApplicationContext applicationContext;

    @Test
    void testSpring() throws Exception {
        //默认是applicationContext
        System.out.println(person);
        System.out.println(beanfactory);
        System.out.println(applicationContext);
    }
}
//注意⚠️:此时我们的配置文件一定要以「“测试类的类名”-context.xml」命名!!!!

相关文章

网友评论

      本文标题:Spring5(2) - IOC容器(1)

      本文链接:https://www.haomeiwen.com/subject/gfixnftx.html