Spring Bean


IoC 编程 和 术语

前面简单的接触了Spring IOC,以及简单的实现,今天就来深入踩踩坑...


接口

只能有方法的声明不能有实现,支持多重继承(在java8中接口可以拥有方法体)

抽象类:即可以有包含实现的声明也可以有不包含实现的声明

类:声明必须包含实现,接口实现的变动不会影响其他各层的调用,对公共服务非常重要

结构设计中,分清层次及调用关系,每层只向外(上层)提供一组功能接口,各层间仅依赖接口而非实现类

接口实现的变动不影响各层间的调用,这一点在公共服务中尤为重要.

"面向接口编程"中的"接口"是用于隐藏具体实现多态性的组件.


IoC (Inversion of Control)

控制反转,控制权的转移,使应用程序本身不依赖对象的创建和维护,交给Spring 容器来维护.它不算技术,而是一种设计思想, IoC 意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。


DI (Dependency Injection)

即"依赖注入",是组件之间的依赖关系由容器来管理,简单点说,DI就是IoC的一种实现方式,目的是创建对象并组装对象之间的关系.即由容器动态的将某个依赖关系注入到组件中.对象之间的引用完全通过JavaBean属性或者构造进行传递.Spring IoC容器使用的就是DI方式.


IoC 容器

IoC 容器就是具有依赖注入功能的容器,IoC 容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。应用程序无需直接在代码中 new 相关的对象,应用程序由 IoC 容器进行组装。在 Spring 中 BeanFactory 是 IoC 容器的实际代表者。


看了一段有意思的梯子

自从有了IOC以后

不必自己创建对象了

IOC机制就提供了

面向接口编程了

IOC藏实现了

不管对象了

IOC管了

变好了

IOC


Bean容器初始化基础两个包

org.springframework.beans 的BeanFactory提供配置结构和基本功能,加载并初始化Bean

org.springframework.context 的 ApplicationContext保存了Bean对象并在Spring中被广泛使用


ApplicationContext初始化的方式

本地文件

ClassPath

Web应用中依赖Servlet或Listener


单元测试

基于Junit工具包

下载Junit-*.jar,并引入工程

创建UnitTestBase类,完成对Spring配置文件的加载,销毁

所有的单元测试类都继承自UnitTestBase,通过它的getBean()方法获取想要得到的对象.

子类(具有执行单元测试类的类)加注解:@RunWith(BlockJUnit4ClassRunner.class)

单元测试方法加注解:@Test

右键选择要执行的单元测试方法执行或者执行一个类的全部单元测试方法


实现

创建Spring Bean

package net.boy.spring;
@Component
public class BeanScope {
    @Autowired
    private String name;
    
    @Override
    public void setName(String name) {
        this.name = name;
    }
    
    @Override
    public void say() {
        System.out.println("BeanScope say : " + this.hashCode());
    }
}

创建Spring Bean的配置文件

<?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="beanScope" class="com.imooc.bean.BeanScope" scope="singleton"></bean>
        
 </beans>

创建测试类

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;

import net.boy.spring.BeanScope;
import net.boy.spring.UnitTestBase;

@RunWith(BlockJUnit4ClassRunner.class)

public class TestBeanScope extends UnitTestBase {
    
    public TestBeanScope() {
        super("classpath*:spring-beanscope.xml");
    }
    
    @Test
    public void testSay() {
        BeanScope beanScope = super.getBean("beanScope");
        beanScope.say();
        
        
    }

}

以上为手打,主要想让自己有些记忆.主要是概念,需要多多记忆.先整理这么多...

最后由 不一样的少年 编辑于2016年12月09日 22:32