救急:spring中普通类调用service类怎么调用

jamesqsj 2011-08-20 05:18:03
最近用spring3、mybatis开发一个项目,遇到一问题百思不得其解,还望各位大大解惑
定义一个IUserRecordService类,如下:

public interface IUserRecordService {

public static final String SERVICE_NAME = "com/demo/service/system/dataanalysis/IUserRecordService";


public void insert(List<UserRecordEntity> list) throws ServiceException;

}

然后实现接口,如下:

@Service(IUserRecordService.SERVICE_NAME)
public class UserRecordImpl implements IUserRecordService {

@Autowired
private IUserRecordMapper iurm;

@Override
@Transactional
public void insert(List<UserRecordEntity> list) throws ServiceException {
try {
iurm.insert(list);
} catch (SQLException e) {
WqLogger.error("新增用户数据分析出错", e, UserRecordImpl.class);
throw new ServiceException(e);
}
}

}

applictionContext.xml中配置如下:
<context:component-scan base-package="com.demo.service" />拦截service

我定义一个普通类:

pubilic class SyncClientService{
private IUserRecordService userRecodeService;
public int syncDataList(){
//这里如何得到userRecodeService并调用
//userRecodeService.insert();方法呢,
}
}


非常感谢!!
...全文
9868 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
24K純帥 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fly_m 的回复:]

普通类,获取applicationContext,从context中取。
[/Quote]
+1
bijanen19861113 2011-08-22
  • 打赏
  • 举报
回复
对头,要在普通类(一般是接口的实现类)中调用接口的方法,肯定要通过getBean方法得到接口对象,具体的有几种方法,百度下肯定有的(具体的我忘了,呵呵)..楼上的说的只是其中的一种
qiangHar 2011-08-22
  • 打赏
  • 举报
回复
学习 ,飘过。
jiangdaxian2003 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mib007 的回复:]
我的applicationContext.xml是放在WEB-INF/classes/spring目录下,请问
AbstractApplicationContext ctx
= new ClassPathXmlApplicationContext("applicationContext.xml"});怎么报错?
[/Quote]

LZ改为spring/applicationContext.xml,然后在web部署下试试

至于
UserService us = (UserServiceImpl)ctx.getBean("UserService");//此处的"UserService"是否就是替换我定义的IUserRecordService 中的SERVICE_NAME 呢?

可以的,但是名字一般是把类名首字母改小写为名字,例如userService


jamesqsj 2011-08-21
  • 打赏
  • 举报
回复
我的applicationContext.xml是放在WEB-INF/classes/spring目录下,请问
AbstractApplicationContext ctx
= new ClassPathXmlApplicationContext("applicationContext.xml"});怎么报错?
jamesqsj 2011-08-21
  • 打赏
  • 举报
回复
晕,怎么代码没有贴上来呢?

public class SyncClientService(){//该类需要在applicationContext.xml中注册吗?
//此方法调用servie中的方法
public void syncDataList(){
AbstractApplicationContext ctx
= new ClassPathXmlApplicationContext(new String []{"beans.xml"});//此处是否把beans.xml替换为我用的applicationContext.xml,是否需要绝对路径呢?

UserService us = (UserServiceImpl)ctx.getBean("UserService");//此处的"UserService"是否就是替换我定义的IUserRecordService 中的SERVICE_NAME 呢?

}
}

非常感谢!
leiting321 2011-08-21
  • 打赏
  • 举报
回复
学习路过
jamesqsj 2011-08-21
  • 打赏
  • 举报
回复
感谢楼上的各位,我在一个普通类SyncClientService中调用IUserRecordService.insert()方法,应该不需要在application.xml中注册该普通类了吧

public class SyncClientService{
public void syncDataList(){
AbstractApplicationContext ctx
= new ClassPathXmlApplicationContext(new String []{"beans.xml"});//此处我是用的applicationContext.xml,报错。是否需要指定绝对路径地址呢?
UserService us = (UserServiceImpl)ctx.getBean("UserService");//此处“UserService”是否就是替换我定义的IUserRecordService的SERVICE_NAME(com/demo/service/...)名称呢?
}
}

多谢!
caixuanbin 2011-08-20
  • 打赏
  • 举报
回复
帮楼主顶一下
LMAOhuaNL 2011-08-20
  • 打赏
  • 举报
回复
AbstractApplicationContext ctx
= new ClassPathXmlApplicationContext(new String []{"beans.xml"});
UserService us = (UserServiceImpl)ctx.getBean("UserService");
等同
fafi09 2011-08-20
  • 打赏
  • 举报
回复
同意楼上的,
参考下面代码

AbstractApplicationContext ctx
= new ClassPathXmlApplicationContext(new String []{"beans.xml"});
UserService us = (UserServiceImpl)ctx.getBean("UserService");
Fly_m 2011-08-20
  • 打赏
  • 举报
回复
普通类,获取applicationContext,从context中取。
GIS__ 2011-08-20
  • 打赏
  • 举报
回复
在service类中注入dao
private IUserRecordMapper iurm

public void setIurm (String iurm) {
this.iurm= iurm;
}

dao的set方法就行

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧