Dobry.
Jest możliwość wstrzyknięcia własnego beana do konstruktora komponentu?
Tworze połączenie z bazą danych i zwracany jest obiekt sesji. Następnie tego obiektu potrzebuję w klasie DAO.
Wygląda to tak:
Konfiguracja:
@Configuration
public class DatabaseConfig {
@Autowired
Environment env;
private Cluster cluster;
private Session session;
public DatabaseConfig()
{
cluster = Cluster.builder()
.addContactPoint("127.0.0.1")
.build();
Metadata metadata = cluster.getMetadata();
System.out.printf("Connected to cluster: %s\n",
metadata.getClusterName());
for ( Host host : metadata.getAllHosts() ) {
System.out.printf("Datacenter: %s; Host: %s; Rack: %s\n",
host.getDatacenter(), host.getAddress(), host.getRack());
}
session = cluster.connect("app");
session.init();
}
@Bean
public Cluster getCluster() {
return cluster;
}
@Bean
public Session getSession() {
return session;
}
}
DAO:
@Component
public class ServiceDaoImpl {
@Autowired
Session session;
private Mapper<Service> mapper;
private MappingManager mappingManager;
private ServiceAccessor accessor;
public ServiceDaoImpl() {
//tu mi jest potrzebny obiekt sesji
mappingManager = getMappingManager();
mapper = getMapper();
}
private MappingManager getMappingManager() {
return new MappingManager(session);
}
....
W metodzie testowej opatrzonej adnotacją @PostConstruct obiekt sesji już jest i mogę go używać.
Da się jakoś zrobić aby wymusić kolejność tworzenia komponentów lub coś innego aby obiekt sesji był już utworzony gdy go potrzebuję?