[英]Is it possible pass non-managed arguments/bean args along with @value and/or spring managed bean
[英]Print non-managed Spring bean name
我創建了一個簡單的SpringBoot應用程序。 有兩個類:
1)ManagedBean類
@Component
class ManagedBean
{
public void fn()
{
System.out.println("B doin nothing");
}
}
2)NonmangedBean:它具有ManagedBean類的依賴關系
class NonmangedBean
{
@Autowired
ManagedBean mb;
public void fn()
{
mb.fn();
System.out.println("doin nothing");
}
}
第三類服務具有休息點。
@RestController
@RequestMapping("/")
class Service
{
@Autowired
AutowireCapableBeanFactory beanFactory;
@Autowired
ApplicationContext applicationContext;
@GetMapping("/getBeanNames")
public List<String> printBeans()
{
return Arrays.asList(applicationContext.getBeanDefinitionNames());
}
@GetMapping("/processBean")
public String processBean()
{
NonmangedBean nb = new NonmangedBean();
beanFactory.autowireBean(nb);
nb.fn();
return "Success";
}
}
首先,我要調用/ processBean端點,該端點將創建NonmangedBean類的Object並將其自動裝配。 (在此我要強調的是,在我關閉服務器之前,bean將一直存在於Spring Container中。)
之后,我點擊/ getBeanNames端點以獲取Spring Container中的所有bean名稱,但是在列表中沒有找到NonmangedBean。 我在該列表中找到ManagedBean。
問題:
1)這種類型的(NonmangedBean)自動接線的豆是否可以存儲在Spring Container中? 2)這種自動裝配的bean是否會在請求過程完成后就死掉? 3)我在printBeans方法中做錯了什么嗎? 除了applicationContext之外,我還應該使用其他任何東西來獲取SpringBean列表嗎? 打開您的建議。 提前致謝。
在這里我很理解豆子將一直存在於Spring Container中直到我關閉服務器
您的理解是錯誤的,它將隨請求而死,即對象的范圍僅在該method( processBean
)內。 容器將無法管理您的bean。 除此之外,使用沒有意義
@Autowired
在非托管bean中。 由於容器不對其進行管理,因此它將為null(除非您使用beanFactory.autowireBean();
注入它),因此回答了您是否可以使用spring服務打印任何此類bean的問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.