首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring annotation @Autowired是如何工作的?

Spring annotation @Autowired是如何工作的?
EN

Stack Overflow用户
提问于 2010-08-21 14:51:09
回答 4查看 33K关注 0票数 52

我遇到了一个@Autowired的例子

代码语言:javascript
复制
public class EmpManager {
   @Autowired
   private EmpDao empDao;
}

我很好奇empDao get是如何设置的,因为没有setter方法,而且它是私有的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-22 00:14:59

Java允许通过作为反射框架一部分的AccessibleObject.setAccessible() method ( FieldMethod都继承自AccessibleObject)关闭对字段或方法的访问控制(是的,需要先通过安全检查)。一旦可以发现字段并将其写入,剩下的工作就很简单了;仅仅是一个Simple Matter Of Programming

票数 44
EN

Stack Overflow用户

发布于 2010-08-22 00:03:44

Java允许您通过反射与类的私有成员进行交互。

查看ReflectionTestUtils,它对于编写单元测试非常方便。

票数 7
EN

Stack Overflow用户

发布于 2013-01-28 18:41:23

不需要任何设置器,您只需使用注释@component声明EmpDao类,以便Spring将其识别为包含在ApplicationContext中的组件的一部分……

您有两种解决方案:

  • 在XML文件applicationContext:

中手动声明beans

代码语言:javascript
复制
<bean class="package.EmpDao" />

  • 通过在上下文文件中设置以下行来使用自动检测:

代码语言:javascript
复制
<context:component-scan base-package="package" />
<context:annotation-config />

使用spring注解来声明spring容器将作为组件管理的类:

代码语言:javascript
复制
@Component
class EmpDao {...}

使用@Autowired注释其引用的

代码语言:javascript
复制
@Component (or @Controller, or @Service...)
class myClass {

// tells the application context to inject an instance of EmpDao here
@Autowired
EmpDao empDao;


public void useMyDao()
{
    empDao.method();
}
...
}

自动装配是通过将一个bean的实例放入另一个bean的实例中所需的字段来实现的。这两个类都应该是bean,即它们应该被定义为存在于应用程序上下文中。

Spring知道bean EmpDaoMyClass的存在,并将在MyClass中自动实例化EmpDao的一个实例。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3536674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档