zoukankan      html  css  js  c++  java
  • [Java Sprint] AutoWire

    Previous we have seen constructore injection: https://www.cnblogs.com/Answer1215/p/9484872.html

    It would be easier to using autowire to reduce the code, and autowite has four different types:

    • byType
    • byName
    • constructor
    • no

    First let's see how to use 'autowire="constructor"':

        <bean name="customerService" class="com.pluralsight.service.CustomerServiceImpl" autowire="constructor">
            <!-- <constructor-arg index="0" ref="foo"></constructor-arg> -->
        </bean>

    We comment out constructor injection and using autowire.

    byName:

    package com.pluralsight.service;
    
    import com.pluralsight.model.Customer;
    import com.pluralsight.repository.CustomerRepository;
    
    import java.util.List;
    
    public class CustomerServiceImpl implements CustomerService {
    
    
        //private CustomerRepository customerRepository = new HibernateCustomerRepositoryImpl();
        private CustomerRepository customerRepository;
    
        public CustomerServiceImpl () {
    
        }
    
        public CustomerServiceImpl (CustomerRepository customerRepository) {
            this.customerRepository = customerRepository;
        }
    
     // if set autowire by name, so in applicationContext <bean name="customerRepository" ..>
    // if <bean name="foo" ..> then this function should be rename public void setFoo(CustomerRepository customerRepository)
        public void setCustomerRepository(CustomerRepository customerRepository) {
            this.customerRepository = customerRepository;
        }
    
    
        @Override
        public List<Customer> findAll() {
            return customerRepository.findAll();
        }
    
    }
    <?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">
    
        <!-- Define a class, using implementation-->
        <bean name="customerRepository" class="com.pluralsight.repository.HibernateCustomerRepositoryImpl"></bean>
    
    
        <!-- Setter injection: Inject HibernateCustomerRepositoryImpl to customerRepository -->
        <bean name="customerService" class="com.pluralsight.service.CustomerServiceImpl" autowire="byName">
            <!--<property name="customerRepository" ref="foo"></property>-->
            <!-- <constructor-arg index="0" ref="foo"></constructor-arg> -->
        </bean>
    </beans>

    byType:

        <bean name="customerService" class="com.pluralsight.service.CustomerServiceImpl" autowire="byType">
            <!--<property name="customerRepository" ref="foo"></property>-->
            <!-- <constructor-arg index="0" ref="foo"></constructor-arg> -->
        </bean>

    It doesn't matter we use 'name="customerService"' or 'name="foo"', because it finding by type, so still will work.

  • 相关阅读:
    Java 最常见的 208 道面试题(第九模块和第十模块答案)
    更灵活的边缘云原生运维:OpenYurt 单元化部署新增 Patch 特性
    高德 Serverless 平台建设及实践
    官宣:恭喜 ChaosBlade 项目进入 CNCF Sandbox
    工商银行分布式服务 C10K 场景解决方案
    云原生的进一步具象化
    阿里云入选 2021 Gartner APM 魔力象限,国内唯一入选云厂商
    云原生下的灰度体系建设
    seata-golang 一周年回顾
    WebAssembly + Dapr = 下一代云原生运行时?
  • 原文地址:https://www.cnblogs.com/Answer1215/p/9484893.html
Copyright © 2011-2022 走看看