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.

  • 相关阅读:
    ssh登录 The authenticity of host 192.168.0.xxx can't be established. 的问题
    Linux学习安装
    linux中的虚拟环境工具
    linux 文件目录权限
    PHP利用百度ai实现文本和图片审核
    Laravel + Swoole 打造IM简易聊天室
    Mysql索引降维 优化查询 提高效率
    Nginx支持比Apache高并发的原因
    网站高并发解决方案(理论知识)
    mysql大量数据分页查询优化-延迟关联
  • 原文地址:https://www.cnblogs.com/Answer1215/p/9484893.html
Copyright © 2011-2022 走看看