【Java】Spring IoC & DI

概念

Spring IoC: 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。
DI: 依赖注入(Dependencies Injection,缩写为DI),通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
Java Bean: JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器,即java类。通常把需要进行控制反转的类叫做Java Bean。
POJO: POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans。通常把实体类和模型类称作是POJO。
Spring IoC容器: 管理JavaBean的容器。我们把对象的创建交给Spring来做,这时,Spring就充当了IoC容器。


Java Bean的配置


<bean  id=""  class=""  scope=""  lazy-init="" 
	   init-method=""   parent=""   abstract="">
bean>

id:

  • 指定Bean的id,一般规范为类名第一个字母小写

class:

  • 指定类的全路径

scope:

  • singleton(default):单例模式,会在Spring容器初始化时就创建
  • prototype: 原型模式,每次调用都是一个新实例
  • session、request

lazy-init:

  • default(default):默认情况下等同于false
  • false:spring容器初始化时就创建对象
  • true:只有当需要使用该bean时,才进行创建

init-method:

  • methodName:创建时执行bean中的该方法只能执行无参数的初始化方法

parent:

  • parentName:指定父类Bean的名称,用以继承其方法和属性

abstract:

  • false(default):指代该类不是抽象类
  • true:该类是抽象类,不能创建对象,但能被指定为父类

依赖注入

依赖注入分为两种方式:

  • 设值注入(setter注入):利用settter方法设置属性值。
<bean id="id"  class="class">
	<property name="属性名" value="属性值">property>
bean>
  • 构造器注入:利用构造方法注入属性值。
<bean id="id"  class="class">
	<constructor-args>
	constructor-args>
bean>

注入复杂类实例

我们需要对User类分别进行构造器注入和设值注入,并且使用Test测试用例进行测试。

package com.spring.test;

import java.util.Map;

public class User {

    private Map<String, String> map;

    public User(){

    }

    public User(Map<String, String> map){
        this.map = map;
    }

    public void setMap(Map<String, String> map) {
        this.map = map;
    }

    public void getUser(){
        System.out.println("name: " + map.get("name"));
        System.out.println("gender: " + map.get("gender"));
    }
}
package com.spring.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {


    public static void main(String[] args) {

        ApplicationContext ac = new ClassPathXmlApplicationContext("spring-mvc.xml");
        User u = (User)ac.getBean("user");
        u.getUser();

    }

}
构造器注入




    <bean id="user" class="com.spring.test.User">
        <constructor-arg>
            <map>
                <entry key="name" value="张三"/>
                <entry key="gender" value=""/>
            map>
        constructor-arg>
    bean>

beans>

测试用例执行结果如下:
【Java】Spring IoC & DI_第1张图片

设值注入(setter注入)





    <bean id="user" class="com.spring.test.User">
        <property name="map">
            <map>
                <entry key="name" value="李四">entry>
                <entry key="gender" value="">entry>
            map>
        property>
    bean>

beans>

测试用例执行结果如下:
【Java】Spring IoC & DI_第2张图片

你可能感兴趣的:(Java)