码迷,mamicode.com
首页 > 编程语言 > 详细

[Java Sprint] AutoWire

时间:2018-08-16 10:40:47      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:diff   override   void   ref   .repo   app   www.   fine   dex   

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 Sprint] AutoWire

标签:diff   override   void   ref   .repo   app   www.   fine   dex   

原文地址:https://www.cnblogs.com/Answer1215/p/9484893.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!