Reputation: 21981
@Bean
public Session session(){
SessionConnector connector=new SessionConnector(url,username,password,environment);
Session session= connector.getSession();
session.registerListener(listener());
return session;
}
@Bean
public Listener listener(){
return new Listener(session())
}
I have the code above which ends up running an endless loop...How can I separate the registration of the listener into a separate method? (I tried creating a temporary private Session bean without the registration code but for some reason you cant have private beans?)
Thxs.
Upvotes: 1
Views: 316
Reputation: 6879
I like to use the following pattern just to make sure beans are not instantiated more than once. You still obviously however need to remove the cyclic dependency.
@Bean
public Session session(){
if (session == null) {
SessionConnector connector=new SessionConnector(url,username,password,environment);
session= connector.getSession();
}
return session;
}
@Bean
public Listener listener(){
if (listener == null) {
Session session = session();
listener = new Listener(session);
session.registerListener(listener);
}
return listener;
}
private Session session;
private Listener listener;
Upvotes: 1
Reputation: 45576
Listener
does not have to be a @Bean
.
You can call a regular Listener
constructor and pass a session.
Here is modified code:
@Bean
public Session session(){
SessionConnector connector=
new SessionConnector(url,username,password,environment);
Session session= connector.getSession();
// This is modified initialization code
Listener listener = new Listener( session );
session.registerListener(listener);
return session;
}
EDIT
If you need to have listener as a singleton, then I suggest you register it with the session in its initialization code.
@Bean
public Session session(){
SessionConnector connector=
new SessionConnector(url,username,password,environment);
Session session= connector.getSession();
return session;
}
@Bean
public Listener listener(){
Session session = session( );
Listener listener = new Listener( session );
session.registerListener( listener );
return listener;
}
Upvotes: 2