我最近在Spring中发现的一个非常酷且令人难以置信的令人惊奇的功能是自动自动装配bean。
我指的是这样的:
class UserServiceImpl implements UserService {
@Autowired
UserService service;
// other service methods...
}
我的问题如下:
Spring如何管理这个?它是否将同一对象分配给自自动参照?像这样:
UserServiceImpl serviceImpl = new UserServiceImpl();
serviceImpl.setService(serviceImpl); // Obviously this would be done via Reflection rather than a setter.
要么
Spring会创建2个单独的对象吗?像这样:
UserServiceImpl obj1 = new UserServiceImpl();
UserServiceImpl obj2 = new UserServiceImpl();
obj1.setService(obj2);
并obj1
在我们提出要求时给我们RestController
吗?
与上一个问题相关,该对象有多少个实际副本?
对于跨方法事务之类的事情来说,这是一个非常方便的功能,但是我想知道这里幕后到底发生了什么。
如果您使用@ Transactional,@ Cachable等注释,则不会注入UserServiceImpl。实际上会注入代理。
但是作为基础,它使用相同的实例。
从4.3开始,@ Autowired还考虑了自我引用以进行注入(即,引用回当前注入的Bean)。请注意,自我注入是一个后备。对其他组件的常规依赖始终优先。从这个意义上说,自我推荐不参与常规的候选人选择,因此特别是绝不是主要的。相反,它们总是以最低优先级结束。实际上,您应该仅将自引用用作最后的手段(例如,通过bean的事务代理在同一实例上调用其他方法)。考虑在这种情况下将受影响的方法分解为单独的委托Bean。或者,您可以使用@Resource,它可以通过其唯一名称获取返回到当前bean的代理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句