全国咨询热线:400-618-4000

Spring之Spring Bean

创建时间:2018年07月25日10时03分

IOC          inversion of Controller 控制反转。
由我们自己实例化的对象交给spring容器来实始化。这时对象的初始化的权利就会反转。

DI                dependency injection 依赖注入
在spring框架负责创建Bean对象时,动态将依赖对象注入到Bean组件

IOC/DI区别
                IOC 控制反转,是指对象实例化权利由spring容器来管理
                DI 依赖注入 在spring创建对象的过程中,对象所依赖的属性通过配置注入对象中。


Spring Bean基本步骤

1.导入相关jar包

        spring-beans-4.2.4.RELEASE.jar
        spring-context-4.2.4.RELEASE.jar
        spring-core-4.2.4.RELEASE.jar
        spring-expression-4.2.4.RELEASE.jar


2.导入相关日志包

        commons-logging-1.2.jar
        log4j-1.2.16.jar
        
3.在项目的src目录下创建applicationContext.xml文件

        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
                        "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
        <beans>
                <bean id="userService" class="com.b3a4a.ioc.UserServiceImpl"> 
                        <!-- 通过依赖注入将cnB3a4a这个值注到实例对象的info属性中 -->
                        <property name="info" value="cnB3a4a"></property> 
                </bean>
        </beans>
        
        注意:
        
        <bean></bean>标签注意事项
        
                在开发中可以使用id或name 
                id它遵守xml规范,名称中不能包含特殊符号                 
                name它是为了更好的扩展,在name中可以包含一些特殊符号,例如"_"


4.创建接口(IUserService)和实现类(UserServiceImpl)

        public interface IUserService {
                public void hello();
        }


        public class UserServiceImpl implements IUserService {
                private String info;
                @Override
                public void hello() {
                        System.out.println("hello " + info);
                }
                
                //省略get/set方法
                ......
        }

5.获取对象实例

        @Test
        public void test(){
                ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
                IUserService service = (IUserService) applicationContext.getBean("userService");
                service.sayHello();
        }


上面就是一个基本的使用步骤了,但是这个只是一个最基本的入门,那么接下来咱们则开始给大家一点点的引入

首先,大家需要明确一个问题,那就是我们这个Spring Bean这块的作用是什么?
很简单,就是我们相关对象以前是通过自己new 对象的形式来创建的,现在呢,则改为让框架统一对咱们的对象进行管理.所以咱们先来看下在Spring中,我们的对象究竟是有谁来创建的.当然.说简单点,其实底层实现起来是通过 解析xml配置文件+反射+工厂模式来实现的, 而我们在使用的过程中,我们真正需要了解的就是所谓的对象是通过哪些工厂来实现的呢?

1)BeanFactory
2)ApplicationContext
3)ClassPathXmlApplicationContext
4)FileSystemXmlApplicationContext
5)WebApplicationContext

他们之间的关系
BeanFactory(根接口)        -->                ApplicationContext(子接口)        
至于ClassPathXmlApplicationContext,FileSystemXmlApplicationContext,WebApplicationContext则是一个个具体的实现类,当然这里先和大家说声,真实开发中都是使用
WebApplicationContext来实例化咱们的spring bean容器,但是这个工厂我们不需要自己去创建,通过一些配置,我们就能让这个对象在咱们项目启动的时候自动初始化~


创建工厂的方式
        
    a)通过BeanFactory来获取
          BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
    b)通过ClassPathXmlApplicationContext来获取
         ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext.xml");
    c)通过FileSystemXmlApplicationContext来获取
         ApplicationContext factory = new FileSystemXmlApplicationContext("src/applicationContext.xml");

通过工厂获取实例对象

                IBean bean = (IBean) factory.getBean("bean");

但是这里有一个小小的知识点需要告诉大家,BeanFactory是延迟加载,ApplicationContext是加载配置文件的时候加载

ok.那么到此为止,咱们对Springbean这块有了个基本认识,下次的话就给大家去聊下如何玩转ioc和di(xml和注解的方式)



作者:传智播客
javaEE培训学院