2017-04-21 89 views
0

我是新来的春天春对象的创建和@autowiring注释

我可以理解,@Autowiring被用来创建object.I看到一个示例项目和代码这样

@Autowired 
private EmployeeManager employeeManager; 

但我可以看到,EmployeeManager是一个接口

public interface EmployeeManager { 
    public void addEmployee(EmployeeEntity employee); 
    public List<EmployeeEntity> getAllEmployees(); 
    public void deleteEmployee(Integer employeeId); 
} 

但在Java中,我们不能创建接口的对象right.So是如何工作的.Slightly困惑

你能解释一下吗?

+4

Autowire不会创建任何内容:它会指示Spring容器找到声明类型的组件并将其设置在标记的字段中。您仍然必须编写实现并将其注册到Spring。 –

回答

1

当您使用@Autowire任何接口时,spring会搜索与自动装配接口映射的bean并相应地实例化(creates a singleton instance)具体类/实现。这些bean是在servlet-config中定义的,无论是通过XML还是Java代码完成。

2

您需要为该类提供一个实现。让我们说EmployeeManagerImpl。所以当spring发现这个语句时,它看起来在spring的上下文中,看看你是否已经定义了EmployeeManager类型的任何bean(具体类型)。如果它确切地找到一个这种类型的bean,它将获取该bean并将其放入属性employeeManager中。

当我们说定义bean时,有两种方法可以做到这一点。

无论是XML的方式,

<bean class = "org.sample.EmployeeManagerImpl /> 

或者批注方式

@Component 
public class EmployeeManagerImpl { 
} 

在应用程序启动时,春发现所有的XML文件和扫描所有类@Component注释,创建并在春天的环境中存储它们。作为启动的一部分,当它遇到一些具有Autowired注解的类(它应该是一个bean)时,它会尝试向该属性注入一个bean(这只是一个类的实例)。