我有我的TCPServer
類實現Runnable
並註釋了@Component
。 而且我有一個ThreadPoolTaskExecutor
它將運行TCPServer
。春天 - 在主要使用@Component註釋類的正確方法
在TCPServer
我也有一個類,它是註釋與@Repository
。 如果我嘗試調用taskExecutor.execute(new TCPServer())
,這將不會由Spring管理,因此我的存儲庫對象將爲空。
我怎樣才能得到TCPServer
的實例在Main
,所以我可以把它給taskExecutor?
TCPSERVER:
@Component
@Scope("prototype")
public class TCPServer implements Runnable {
@Autowired
private StudentRepository studentRepository;
//rest of code
}
StudentRepository:
@Repository
public interface StudentRepository extends CrudRepository<Student, Long> {
}
我已經嘗試過這樣的:
TCPServer tcpServer = (TCPServer) applicationContext.getBean("tcpServer");
但是,這是我得到:
異常線程 「main」 org.springframework.beans.factory.NoSuchBeanDefinitionException:無豆命名爲 'TCPSERVER' 可用
編輯:
MySpringApplication
:com.example.myspringapp;
TCPServer
:com.example.myspringapp.server;
也許這只是一個命名問題http://stackoverflow.com/questions/10967279/is-spring-getbean-case-sentitive-or-not你嘗試命名你的班'TcpServer',並用最後一行恢復它你指出? – RubioRic
使用'applicationContext.getBean(「tcpServer」)'獲取bean是正確的。可能bean'TCPServer'沒有被創建。我懷疑它不在主類包的子包中。你可以添加主應用類和TCPServer類的包嗎? –
也嘗試通過'TCPServer tcpServer =(TCPServer)applicationContext.getBean(TCPServer.class)'類型來投注Bean;' –