求助!!!!Spring注入的类为null
@Componentpublic class SipServerIoHandler extends IoHandlerAdapter {
...................
...................
private FunctionService functionService;
public FunctionService getFunctionService() {
return functionService;
}
public void setFunctionService(FunctionService functionService) {
this.functionService = functionService;
}
...................
@Override
public void messageReceived(IoSession session, Object message) {
functionService.toString();
}
}
messageReceived()的方法是网络接到异步数据时触发的。这时候functionService是null
下面是我Action类使用方法,这时functionService不是null,请问这是怎么回事?我想让上面的functionService能够被Spring注入。
@Controller("projectAction")
@Scope("prototype")
public class CtrlAction extends BaseAction {
...........
..........
@Resource
private FunctionService functionService;
public void setFunctionService(FunctionService functionService) {
this.functionService = functionService;
}
public FunctionService getFunctionService() {
return functionService;
}
.............
.............
public String write() throws Exception {
if (StringUtils.isNotBlank(id) && StringUtils.isNotBlank(value)) {
List<Function> list = functionService.findAll();
for(Function f : list){
logger.info("测试按钮组对象名称:"+f.getFunctionName());
}
}
return SUCCESS
}
}
--------------------编程问答-------------------- 我使用的Struct2 + Spring3.0 + Hibernate3的网站框架开发。 --------------------编程问答-------------------- 你functionService上没加@Resource注解或@Autowired --------------------编程问答-------------------- 下面是我Action类使用方法,这时functionService不是null,请问这是怎么回事?我想让上面的functionService能够被Spring注入
public class SipServerIoHandler extends IoHandlerAdapter {
...................
...................
@Autowire
private FunctionService functionService;
public FunctionService getFunctionService() {
return functionService;
}
public void setFunctionService(FunctionService functionService) {
this.functionService = functionService;
}另外 不需要你的 FunctionService 的 set get 方法 看来你SPRING AOP 还有待理解
--------------------编程问答-------------------- 楼上的大哥们,@Resource注解或@Autowired我加了之后还是不行。 --------------------编程问答-------------------- @Autowire和get set不是一样的效果么。。?这二者有什么区别? --------------------编程问答-------------------- LZ,实在不行,xml里面注入下试试!
--------------------编程问答-------------------- 暂时使用了其他方法解决了。functionService = this.listener.getFunctionService(); 可以引用过来listener 是SipServerClient声明
这是SipServerIoHandler的构造函数
public SipServerIoHandler(SipServerClient listener, MessageProcessorFactory messageProcessorFactory)
{
this.listener = listener;
this.messageProcessorFactory = messageProcessorFactory;
}
下面这是SipServerClient Init初始化
@Component
public class SipServerClient {
...........
..........
@Resource
private FunctionService functionService;
public FunctionService getFunctionService() {
return functionService;
}
public void setFunctionService(FunctionService functionService) {
this.functionService = functionService;
}
...........
..........
/**
* init:初始化服务器客户端
*
* @since ids1.0
*/
public void init(ServletContext servletContext) {
this.servletContext = servletContext;
connector = new NioSocketConnector();
connector.setConnectTimeoutMillis(connectTimeoutMillis);
connector.setHandler(new SipServerIoHandler(this, messageProcessorFactory));
connector.getSessionConfig().setIdleTime(IdleStatus.READER_IDLE, idleInterval);
}
}
虽然找到问题的解决方法, 但是我还不明为什么不能直接Spring注入。
补充:Java , Web 开发