inyección de dependencia primavera

inyección de dependencia primavera

concepto de inyección de dependencias

Inyección de dependencias: la inyección de dependencias. Es un marco de aplicación resorte del núcleo COI concreto de. Nuestro programa en la preparación, mediante la inversión de control, para crear objetos de la primavera, pero el código no depende de circunstancias que no pueden suceder. COI desacoplamiento sólo reducen su dependencia, pero no se elimina. Por ejemplo: Nuestra capa de negocio va a llamar a la capa método de persistencia. Esta dependencia que la capa capa de negocio y la persistencia, después de usar la primavera, que el resorte para mantener. En pocas palabras, se trata de esperar a que el marco de la capa de persistencia de objetos de entrada a la capa de negocio, en lugar del nuestro de conseguir.

función de la COI

Reducir el acoplamiento (dependencias) entre los programas de
gestión de dependencias: después de todo, la primavera que se mantenga

En la necesidad de la clase actual para utilizar objetos de otras clases, proporcionada por el muelle para nosotros, sólo tenemos que explicar en el fichero de configuración

mantenimiento de la dependencia: se llama inyección de dependencias.
La inyección de dependencia: capaz de inyectar datos : Hay tres tipos básicos de cadena y otros tipos de frijol (en el archivo de configuración o la configuración sobre el grano de anotación) Tipo / tipo de colección complejas formas de inyección : tres primero : utilizando el constructor proporcionado segundos: utilizando el método de conjunto para proporcionar una tercera: uso anotaciones para proporcionar (contenido de mañana)







.xml frijol

<?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">



la inyección de constructor

Etiquetas utilizadas: constructor-arg
etiqueta de ubicación aparece: etiqueta interna del grano
atributo de etiqueta
Tipo: tipo de datos que se utilizan para especificar los datos a ser inyectado, el tipo de datos es uno o algunos de los parámetros de constructor tipo de
índice: se usa para especificar los parámetros de inyección de asignación de datos que especifican la posición del índice para el constructor. La posición del índice es cero
nombre: especifica el nombre de una asignación de parámetro constructor especificado comunes
=Para designar a los que tres o más parámetro asignación constructor===================
valor: Cadena de proporcionar tipos básicos y tipos de datos
REF: otros tipos de frijol para los datos especificados. Se refiere a aparecer en la primavera de núcleo Ioc contenedor tenido objeto bean

Ventaja:
Al obtener el objeto bean, los datos de inyección es una necesidad, de lo contrario el objeto no se puede crear con éxito.
Inconvenientes:
el cambio de la forma en que el frijol se crea una instancia de objeto, de modo que cuando creamos objetos, si también se deben proporcionar menos de estos datos.

.xml frijol

<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
    <constructor-arg name="name" value="泰斯特"></constructor-arg>
    <constructor-arg name="age" value="18"></constructor-arg>
    <constructor-arg name="birthday" ref="now"></constructor-arg>
</bean>

<!-- 配置一个日期对象 -->
<bean id="now" class="java.util.Date"></bean>

método de inyección de conjunto

Etiqueta según: propiedad
en la que aparecen: haba variable interna
atributo de etiqueta
nombre: establecer el nombre de un método para especificar la inyección cuando se invoca
valor: String para proporcionar tipos básicos y tipos de datos
REF: con frijol para especificar otros tipos de datos. Se refiere a aparecer en la primavera de frijol tenido núcleo contenedor de objetos Ioc
ventaja:
no hay un límite claro, se puede utilizar directamente el constructor por defecto para crear objetos
inconvenientes:
si un miembro debe tener un valor, se obtiene el objeto es posible que no se implementa el método de ajuste.
.xml -bean

    <bean id="accountService2" class="com.itheima.service.impl.AccountServiceImpl2">
        <property name="name" value="TEST" ></property>
        <property name="age" value="21"></property>
        <property name="birthday" ref="now"></property>
    </bean>

tipo de complejo de inyección

inyección de tipo Collection
para inyección para establecer una estructura de etiqueta de lista: lista de la matriz de conjuntos
para un conjunto de inyección de Mapa estructuras Etiquetas: mapa de los apoyos
misma configuración, la etiqueta puede ser intercambiado

.xml frijol

<bean id="accountService3" class="com.itheima.service.impl.AccountServiceImpl3">
    <property name="myStrs">
        <set>
            <value>AAA</value>
            <value>BBB</value>
            <value>CCC</value>
        </set>
    </property>

    <property name="myList">
        <array>
            <value>AAA</value>
            <value>BBB</value>
            <value>CCC</value>
        </array>
    </property>

    <property name="mySet">
        <list>
            <value>AAA</value>
            <value>BBB</value>
            <value>CCC</value>
        </list>
    </property>

    <property name="myMap">
        <props>
            <prop key="testC">ccc</prop>
            <prop key="testD">ddd</prop>
        </props>
    </property>

    <property name="myProps">
        <map>
            <entry key="testA" value="aaa"></entry>
            <entry key="testB">
                <value>BBB</value>
            </entry>
        </map>
    </property>
</bean>

IAccountService.java

package com.itheima.service;

/**
 * 账户业务层的接口
 */
public interface IAccountService {

    /**
     * 模拟保存账户
     */
    void saveAccount();
}

accountService.java

package com.itheima.service.impl;

import com.itheima.service.IAccountService;

import java.util.Date;

/**
 * 账户的业务层实现类
 */
public class AccountServiceImpl implements IAccountService {

    //如果是经常变化的数据,并不适用于注入的方式
    private String name;
    private Integer age;
    private Date birthday;

    public AccountServiceImpl(String name,Integer age,Date birthday){
        this.name = name;
        this.age = age;
        this.birthday = birthday;
    }

    public void  saveAccount(){
        System.out.println("service中的saveAccount方法执行了。。。"+name+","+age+","+birthday);
    }


}

accountService2.java

package com.itheima.service.impl;

import com.itheima.service.IAccountService;

import java.util.Date;

/**
 * 账户的业务层实现类
 */
public class AccountServiceImpl2 implements IAccountService {

    //如果是经常变化的数据,并不适用于注入的方式
    private String name;
    private Integer age;
    private Date birthday;

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public void  saveAccount(){
        System.out.println("service中的saveAccount方法执行了。。。"+name+","+age+","+birthday);
    }


}

accountService3.java

package com.itheima.service.impl;

import com.itheima.service.IAccountService;

import java.util.Arrays;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import java.util.Map;

/**
 * 账户的业务层实现类
 */
public class AccountServiceImpl3 implements IAccountService {

    private String[] myStrs;
    private List<String> myList;
    private Set<String> mySet;
    private Map<String,String> myMap;
    private Properties myProps;

    public void setMyStrs(String[] myStrs) {
        this.myStrs = myStrs;
    }

    public void setMyList(List<String> myList) {
        this.myList = myList;
    }

    public void setMySet(Set<String> mySet) {
        this.mySet = mySet;
    }

    public void setMyMap(Map<String, String> myMap) {
        this.myMap = myMap;
    }

    public void setMyProps(Properties myProps) {
        this.myProps = myProps;
    }

    public void  saveAccount(){
        System.out.println(Arrays.toString(myStrs));
        System.out.println(myList);
        System.out.println(mySet);
        System.out.println(myMap);
        System.out.println(myProps);
    }

}

Client.java simular una capa de presentación capa de presentación, la capa de negocio para las llamadas

package com.itheima.ui;

import com.itheima.service.IAccountService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 模拟一个表现层,用于调用业务层
 */
public class Client {

    /**
     *
     * @param args
     */
    public static void main(String[] args) {
        //1.获取核心容器对象
        ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
        //2.根据id获取Bean对象
//        IAccountService as  = (IAccountService)ac.getBean("accountService");
//        as.saveAccount();

//        IAccountService as  = (IAccountService)ac.getBean("accountService2");
//        as.saveAccount();

        IAccountService as  = (IAccountService)ac.getBean("accountService3");
        as.saveAccount();

    }
}

Supongo que te gusta

Origin www.cnblogs.com/Lilwhat/p/12584155.html
Recomendado
Clasificación