更新时间:2018-07-24 来源:黑马程序员 浏览量:
由我们自己实例化的对象交给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和注解的方式)
   
 
1024首播|39岁程序员逆袭记:不被年龄定义,AI浪潮里再迎春天
2025-10-241024程序员节丨10年同行,致敬用代码改变世界的你
2025-10-24【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19