[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.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2017-08-16 [Angular] Using the Argon 2 Hashing Function In Our Sign Up Backend Service
2016-08-16 [React Fundamentals] Component Lifecycle - Updating
2016-08-16 [React Fundamentals] Component Lifecycle - Mounting Usage
2016-08-16 [React Fundamentals] Component Lifecycle - Mounting Basics