Spring-IOC (anotación)

1.1 Directorio de proyectos

1.2 Ejemplo de código

Capa de persistencia (Dao)

CustomerDao

package cn.guardwhy.dao;
/**
 * 客户dao接口
 */
public interface CustomerDao {
    
    
    /**
     * 保存客户操作
     */
    void saveCustomer();
}

CustomerDaoImpl

package cn.guardwhy.dao.impl;

import cn.guardwhy.dao.CustomerDao;
import org.springframework.stereotype.Component;

/**
 * 客户dao实现类
 */
@Component("customerDao")
public class CustomerDaoImpl implements CustomerDao {
    
    
    /**
     * 保存客户操作
     */
    @Override
    public void saveCustomer() {
    
    
        System.out.println("保存客户操作");
    }
}

Servicio

Servicio al Cliente

package cn.guardwhy.service;
/**
 * 客户service接口
 */
public interface CustomerService {
    
    
    /**
     * 保存客户操作
     */
    void saveCustomer();
}

CustomerServiceImpl

package cn.guardwhy.service.impl;

import cn.guardwhy.dao.CustomerDao;
import cn.guardwhy.service.CustomerService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 客户service实现类
 */
@Component("customerService")
public class CustomerServiceImpl implements CustomerService {
    
    
    // 定义客户dao
    @Autowired
    private CustomerDao customerDao;

    /**
     * 保存客户操作
     */
    @Override
    public void saveCustomer() {
    
    
        customerDao.saveCustomer();
    }
}

Configurar bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

    <!--配置包扫描注解配置dao/service
        第一步:导入context名称空间和约束
        第二步:
            通过<context:component-scan>标签配置包扫描。spring框架在创建IOC容器的时候,
            会扫描指定的包,和它的子包
    -->
    <context:component-scan base-package="cn.guardwhy"></context:component-scan>
</beans>

Capa de presentación (controlador)

CustomerController

package cn.guardwhy.controller;

import cn.guardwhy.service.CustomerService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 客户controller
 */
public class CustomerController {
    
    
    public static void main(String[] args) {
    
    
        // 1.加载spring配置文件,创建spring ioc容器
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        // 2.实例工厂方法实例化对象
        CustomerService customerService = (CustomerService) context.getBean("customerService");
        // 3.保存用户
        customerService.saveCustomer();
    }
}

Resultados de la

1.3 Notas comunes

1.3.1 Crear anotación de objeto

@Componente

# Acción :
Configure el objeto javaBean. Es equivalente a la etiqueta bean en el modo de configuración xml.

#Properties :
value: Dale al bean un nombre de identificación único.

# Detalles : el
atributo 1.value se puede omitir.
2. De forma predeterminada, la primera letra del nombre de la clase está en minúsculas como nombre del bean.

Ejemplo de código

@ Controlador 、 @ Servicio 、 @ Repositorio

Tres anotaciones de la evolución de @Component

  • @Controller: generalmente utilizado en la capa de presentación
  • @Service: generalmente utilizado en la capa empresarial
  • @Repository: generalmente se usa para la capa de persistencia

Ejemplo de código

1.3.2 Anotación del alcance del bean

@Alcance

#Función :
establece el alcance del bean. Equivalente al atributo de alcance de la etiqueta de bean en el modo de configuración xml

#Attribute :
value: especifica el alcance del valor


# Valor de atributo : singleton: singleton.
Prototipo de valor predeterminado : varios casos

Ejemplo de código

1.3.3 Inyección de anotaciones de datos

@Autowired

#Función : inyectar
datos según el tipo de bean por defecto

# Propiedades :
requerido: si el bean de destino debe existir en el resorte del contenedor IOC (verdadero debe existir; falso: puede que no haya; predeterminado verdadero)

#Detalles :

  • En el contenedor de primavera, si hay varios objetos de instancia de bean del mismo tipo.
  • Inyecte primero según el tipo de frijol y luego haga coincidir según el nombre del frijol.
  • La inyección tiene éxito en el partido; la inyección falla si el partido falla.

Ejemplo de código

@Recurso

#Función : inyectar
datos de acuerdo con el nombre del bean por defecto

#Properties :
nombre: especifica el nombre del bean para inyectar
tipo de datos : especifica el tipo de bean para inyectar datos

#Details :
De forma predeterminada, los datos inyectados se comparan según el nombre del bean. Si la inyección falla, vuelva a inyectar según el tipo de frijol.

Ejemplo de código

@Valor

Inyectar datos en variables de miembro de tipo simple de Java

Ejemplo de código

1.3.4 Anotación del ciclo de vida del frijol

@PostConstruct @PreDestroy

# @ PostConstruct :
Operación de inicialización, equivalente al atributo init-method de la etiqueta bean en el modo de configuración xml.

# @ PreDestroy :
operación de destrucción , que es equivalente al atributo de método de destrucción de la etiqueta del bean en el modo de configuración xml.

Ejemplo de código

1.4 Ejemplo de código

Capa de persistencia (Dao)

CustomerDaoImpl

package cn.guardwhy.dao.impl;

import cn.guardwhy.dao.CustomerDao;
import org.springframework.stereotype.Repository;

/**
 * 客户dao实现类
 */
@Repository("customerDao")
public class CustomerDaoImpl implements CustomerDao {
    
    
    /**
     * 初始化方法
     */
    public void init(){
    
    
        System.out.println("正在执行初始化操作......");
    }

    /**
     * 销毁方法
     */
    public void destroy(){
    
    
        System.out.println("正在执行销毁操作......");
    }

    /**
     * 无参数构造方法
     */
    public  CustomerDaoImpl(){
    
    
        System.out.println("正在创建客户CustomerDaoImpl对象.");
    }
    /**
     * 保存客户操作
     */
    @Override
    public void saveCustomer() {
    
    
        System.out.println("保存客户操作");
    }
}

Servicio

CustomerServiceImpl

package cn.guardwhy.service.impl;

import cn.guardwhy.dao.CustomerDao;
import cn.guardwhy.dao.impl.CustomerDaoImpl;
import cn.guardwhy.service.CustomerService;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;

 /**
 * 客户service实现类:
 */
@Service("customerService")
@Scope(value = "singleton")
public class CustomerServiceImpl implements CustomerService {
    
    
    // 定义客户dao
    // @Resource(name="customerDao")
    @Resource(type = CustomerDaoImpl.class)
    private CustomerDao customerDao;

    // 2.简单类型成员变量
    @Value("1")
    private int id;
    @Value("小明")
    private String name;

    // 初始化操作
    @PostConstruct
    public void init(){
    
    
        System.out.println("正在执行初始化操作");
    }

    // 销毁操作
    @PreDestroy
    public void destroy(){
    
    
        System.out.println("正在执行销毁操作....");
    }

    /**
     * 保存客户操作
     */
    @Override
    public void saveCustomer() {
    
    
        System.out.println("id="+id+",name="+name);
        customerDao.saveCustomer();
    }
}

Capa de presentación (controlador)

CustomerController

package cn.guardwhy.controller;

import cn.guardwhy.service.CustomerService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 客户controller
 */
public class CustomerController {
    
    
    public static void main(String[] args) {
    
    
        // 1.加载spring配置文件,创建spring ioc容器
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        // 2.实例工厂方法实例化对象
        CustomerService customerService = (CustomerService) context.getBean("customerService");
        // 3.保存用户
        customerService.saveCustomer();
        // 4.销毁容器
        context.close();
    }
}

Resultados de la

Supongo que te gusta

Origin blog.csdn.net/hxy1625309592/article/details/114993544
Recomendado
Clasificación