zoukankan      html  css  js  c++  java
  • 第二章 IoC

    • 什么是IoC
    • 如何配置IOC
    • Bean的生命周期
    • 多环境配置
    • 条件化配置Bean

    什么是IOC?

    IOC有两层含义,

    1、控制反转:将对象实例的创建与销毁的权限交给Spring容器管理,而不再是调用对象内部自己new

    2、依赖注入:Spring容器检测到对象之间的依赖关系,初始化(或者第一次调用)的时候,将对应的实例注入给相关的对象

    如何配置IOC?

    Spring通过几种方式,将Bean对象存放在Spring容器中

    Spring的配置方法,根据配置“媒介”的不同,可以分为XML、Class类

    使用XML对Bean进行配置,又可以按照XML的位置,分为类路径、文件系统路径、Web应用路径

    表格中为几种Spring工厂

    类路径XML   ClassPathXmlApplication
    文件系统路径XML FileSystemXmlApplication
    Web应用路径XML XmlWebApplication
    Class类 AnnotationConfigApplicationContext、AnnotationConfigWebApplicationContext

    使用XML配置Bean

    一个最基本的XML配置的Bean如下

    <bean id="user" class="demo01.part01.User"/>

    使用p命名空间进行属性注入

    <bean id="user" class="demo01.part01.User"
    p:age="27"
    p:name="哇哈哈"/>

    一些简单的属性注入与构造器注入,都可以使用p和c命名空间

    使用如下

    public static void main(String[] args) {
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    User user = (User) applicationContext.getBean("user");
    logger.debug("user:"+user);

    }

    20:36:38.460 [main] DEBUG demo01.part01.Demo01 - user:demo01.part01.User@6e171cd7[name=哇哈哈,age=27]

    如果容器中只有一个User实例,可以使用getBean(Class class)方法,这样就无需强制转化了

    User user = applicationContext.getBean(User.class);

    构造器注入

    <bean id="user" class="demo01.part01.User">
    <constructor-arg name="name" value="哇哈哈"/>
    <constructor-arg name="age" value="12"/>
    </bean>


    OR
    <bean id="user" class="demo01.part01.User"
    c:name="我问问"
    c:age="17"/>

    当然,前提是有此种构造方法

    XML配置Bean的方式显得很麻烦,所以有更好的注解的方法,配置一个扫描,Bean上添加指定的注解就行。在Spring Boot,甚至连Bean上的注解都可以去掉了。

    所以XML配置Bean的方式就不啰嗦了,对于遗留项目中有需要修改的时候,再参考书籍即可。自己开发的时候,尽可能使用Java配置+扫描,或者Spring Boot的方式

    注解配置

    在XML中使用

    <context:component-scan base-package="demo01"/>

    配置扫描范围

    在Bean上使用注解,标识自己需要被扫描到

    /**
    * Created by sherry on 17/1/10.
    */
    @Component
    public class User {
    ......
    }

    Java配置

    package demo01.part03;

    import org.springframework.beans.factory.annotation.Configurable;
    import org.springframework.context.annotation.ComponentScan;

    /**
    * Created by sherry on 17/1/10.
    */
    @Configurable
    @ComponentScan("demo01")
    public class SpringBean {

    }

    用一个Java类,代替了XML去描述Bean,Java类可以完全代替XML的配置

    以上,只是简单描述了一下Spring容器的初始化的几种风格,实际上Spring的配置非常强大与灵活,足以满足我们开发过程中遇到的各种需求


    IOC最佳实践


    优先把配置都放在Java中,包括扫描目录、Bean初始化、引入其他Java配置类或XML配置文件

    要在开发中遇到实际需求的时候,再考虑Spring为我们提供的简便配置方案

     

    Bean的作用域

    singletion:单例,这也是默认作用域

    prototype:每次从容器中获取出来的都是新实例

    request:

    session:

    global-session

  • 相关阅读:
    8VC Venture Cup 2016
    8VC Venture Cup 2016
    8VC Venture Cup 2016
    HDU 5627 Clarke and MST &意义下最大生成树 贪心
    HDU 5626 Clarke and points 平面两点曼哈顿最远距离
    《花开物语》观后感
    Codeforces Round #146 (Div. 1) B. Let's Play Osu! dp
    Codeforces Round #146 (Div. 1) A. LCM Challenge 水题
    Educational Codeforces Round 7 E. Ants in Leaves 贪心
    Educational Codeforces Round 7 D. Optimal Number Permutation 构造题
  • 原文地址:https://www.cnblogs.com/sherrykid/p/6268694.html
Copyright © 2011-2022 走看看