2015-02-24 82 views
3

@Autowired注释如何在没有getter setter的私人领域中工作? 春天如何进入私人领域?@autowired注释如何为私人领域工作?

+0

http://stackoverflow.com/a/17531269/1297272 – Javier 2015-02-24 11:12:09

+1

它是'@ automagic',因为spring使用反射来实现依赖性连线机制。 – vikingsteve 2015-02-24 11:21:23

+0

不同意这是重复的,因为这些问题纯粹是关于反思。这个问题是要求essentailly为什么春季框架在这个机制中使用反射 – vikingsteve 2015-02-24 11:23:24

回答

6

它与reflection一起使用。 Here您可以找到如何设置公共字段的示例。但是,设置私人领域并没有太大的一个difference

+3

与私人领域的唯一区别在于,您需要先设置'setAccessible',然后才能读取/写入该字段。此外,这个方法可以抛出'SecurityException'。 http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/AccessibleObject.html#setAccessible-java.lang.reflect.AccessibleObject:A-boolean- – PeterK 2015-02-24 11:32:03

+0

对,忘了SecurityException,谢谢。 – wastl 2015-02-24 11:32:42

0
@Component 
public class A(){} 

@Component 
public class B(){ 
@Autowired 
private A a; 
} 

Spring创建bean作为@Component提到。这里首先创建bean A,并且由于B依赖于A,那么完成A到B的注入。不需要任何setter。只需@Component是必需的。 Spring使用CGLib来创建使用反射的bean。

-1

三种类型的依赖注入的

至少有三个方面的目标能够接收到外部模块的引用:

构造函数注入:依赖关系通过类构造函数提供。

setter injection:客户端公开了setter方法,注入器使用它来注入依赖关系。

接口注入:依赖项提供了一个注入方法,它将依赖注入到传递给它的任何客户端。客户端必须实现一个暴露接受依赖关系的setter方法的接口。