• [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.

  • 相关阅读:
    ADO.NET中容易混淆的概念(4)
    ADO.NET中容易混淆的概念(3)
    ADO.NET中容易混淆的概念(2)
    ADO.NET中容易混淆的概念(1)
    引用计数
    ADO.NET中SQL Server数据库连接池
    Python之禅!
    django总结
    Python第六周学习之Linux
    Python第五周前端学习之HTML5/ CSS / JS
  • 原文地址:https://www.cnblogs.com/Answer1215/p/9484893.html
Copyright © 2020-2023  润新知