我遇到了一个@Autowired的例子
public class EmpManager {
@Autowired
private EmpDao empDao;
}我很好奇empDao get是如何设置的,因为没有setter方法,而且它是私有的。
发布于 2010-08-22 00:14:59
Java允许通过作为反射框架一部分的AccessibleObject.setAccessible() method ( Field和Method都继承自AccessibleObject)关闭对字段或方法的访问控制(是的,需要先通过安全检查)。一旦可以发现字段并将其写入,剩下的工作就很简单了;仅仅是一个Simple Matter Of Programming。
发布于 2010-08-22 00:03:44
Java允许您通过反射与类的私有成员进行交互。
查看ReflectionTestUtils,它对于编写单元测试非常方便。
发布于 2013-01-28 18:41:23
不需要任何设置器,您只需使用注释@component声明EmpDao类,以便Spring将其识别为包含在ApplicationContext中的组件的一部分……
您有两种解决方案:
中手动声明beans
<bean class="package.EmpDao" /><context:component-scan base-package="package" />
<context:annotation-config />和使用spring注解来声明spring容器将作为组件管理的类:
@Component
class EmpDao {...}使用@Autowired注释其引用的和
@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 EmpDao和MyClass的存在,并将在MyClass中自动实例化EmpDao的一个实例。
https://stackoverflow.com/questions/3536674
复制相似问题