@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())
}
我上面的代码最终会运行无限循环...如何将侦听器的注册分成单独的方法? (我尝试创建一个没有注册码的临时私有Session bean但由于某种原因你不能拥有私有bean?)
Thxs。
答案 0 :(得分:2)
Listener
不一定是@Bean
。
您可以调用常规Listener
构造函数并传递会话。
以下是修改后的代码:
@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;
}
修改强>
如果你需要将监听器作为单例,那么我建议你在初始化代码中用会话注册它。
@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;
}
答案 1 :(得分:1)
我喜欢使用以下模式来确保bean不会多次实例化。显然,你仍然需要删除循环依赖。
@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;