Spring @Autowired注释
时间:2020-01-09 10:44:29 来源:igfitidea点击:
Spring @Autowired注释用于自动注入依赖项。
在哪里应用@Autowired注释
- 我们可以将@Autowired注释应用到setter方法。参见示例。
- 我们可以将@Autowired注释应用于构造函数。参见示例。
- 我们可以将@Autowired应用于字段。参见示例。
- 我们还可以将注释应用于具有任意名称和多个参数的方法。参见示例。
启用@Autowired注释
要使用@Autowired注释启用自动装配,必须注册" AutowiredAnnotationBeanPostProcessor"类。我们可以直接为其提供bean定义,尽管很少需要。
<bean class = "org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
通过使用<context:annotation-config>元素或者使用<context:component-scan>元素(隐式启用<context:annotation-config>元素的功能),将自动注册AutowiredAnnotationBeanPostProcessor类。这是启用它的首选方法。
Spring @Autowired注释示例
在该示例中,有一个用于下订单的类称为OrderService,可以从商店进行购买。在OrderService类中,必须自动关联商店的依赖关系。使用这些类,我们将了解如何将@Autowired与构造函数,setter,字段或者任意方法结合使用。
在setter上使用@Autowired注释
如果将@Autowired注释应用到setter方法上,就XML配置而言,它等效于autowiring =" byType"。
public interface IStore { public void doPurchase(); }
import org.springframework.stereotype.Service; @Service public class RetailStore implements IStore { public void doPurchase() { System.out.println("Doing purchase from Retail Store"); } }
public interface OrderService { public void buyItems(); }
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class OrderServiceImpl implements OrderService { private IStore store; // Autowired on Setter @Autowired public void setStore(IStore store) { this.store = store; } public void buyItems() { store.doPurchase(); } }
在这里,我们可以看到通过使用setStore()方法上的@Autowired注释可以满足对Store的依赖。
XML配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.theitroad.springproject.service" /> </beans>
在构造函数上使用@Autowired注释
在进行XML配置的情况下,bean的构造函数上的@Autowired注释等效于autowiring =" constructor"。
@Service public class OrderServiceImpl implements OrderService { private IStore store; // Autowired on constructor @Autowired public OrderServiceImpl(IStore store){ this.store = store; } public void buyItems() { store.doPurchase(); } }
在字段上使用@Autowired注释
使用配置文件进行自动装配时,@ Autowired字段上的注释等效于autowiring =" byType"。
@Service public class OrderServiceImpl implements OrderService { // Autowiring on a field @Autowired private IStore store; public void buyItems() { store.doPurchase(); } }
在任意方法上使用@Autowired注释
我们还可以将注释应用于具有任意名称和多个参数的方法。这些参数中的每一个都将与Spring容器中的匹配bean自动连接。
@Service public class OrderServiceImpl implements OrderService { private IStore store; // Autowiring on a method @Autowired public void prepare(IStore store) { this.store = store; } public void buyItems() { store.doPurchase(); } }