非Contorller类使用@Service中的方法
组件扫描这种的是指bean,跟service没关系
service只能在Controller类中使用,如果别的类想使用,必须使用下面这种方法
内容来源:https://blog.csdn.net/u011242657/article/details/71123206
测试可用
使用Spring框架,我们不需要创建类的对象,都有Spring 容器创建,并通过注解来注入。注入的原理就是在程序启动的时候,Spring根据xml中配置的路径来扫描类,如果发现类的上方有类似@Service,@Controller,此时就会定位到当前类,然后来给当前类中标有注解的属性进行注入,从而我们可以使用该属性,调用方法。
那么普通类怎么使用@Service标记的方法呢?
1.如果你想用@autowired,那么这个类本身也应该是在spring的管理下 的,即你的UserLogUtil也要标注为一个component(或Service),这样spring才知道要注入依赖;
2. 如果不标注为@Component的话,此时不能通过@autowired来注入依赖,只能通过ApplicationContext来取得标注为Service的类: UserLogService service = ApplicationContext.getBean(UserLogService.class);
那么Web项目中如何获取ApplicationContext
1.
ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc)
2.
ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc)
注:至于获取ServletContext对象,可以从request,session中获取,他们都有getServletContext()方法
3 写一个工具类实现ApplicationContextAware接口,并将这个加入到spring的容器(推荐)
package com.ncut.ssm.util;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/**
* @author Frank Yuan
* @create 2017-05-02-下午 10:32
**/
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext = null;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext(){
return applicationContext;
}
public static Object getBean(String beanName){
return applicationContext.getBean(beanName);
}
public static Object getBean(Class c){
return applicationContext.getBean(c);
}
然后将此bean注册到spring 的容器中,在spring的配置文件添加如下代码
<bean id="springContextUtil" class="com.ncut.ssm.util.SpringContextUtil"></bean>
最后在普通类就可以这样调用
ApplicationContext appCtx = SpringContextUtil.getApplicationContext();
UserService bean = (UserService)SpringContextUtil.getBean("UserService");
或者
ApplicationContext appCtx = SpringContextUtil.getApplicationContext();
UserService bean = (UserService)SpringContextUtil.getBean(UserService.class);
第一种情况适用于在@Service(“”UserService” “)标注了bean的名字
@Service("UserService")
public class UserServiceImpl implements UserService {
第二种情况适用于在@Service后面什么也没有
@Service
public class UserServiceImpl implements UserService {
这种情况下不能使用UserServcieImpl.class,而是要用其接口类UserService.class,因为UserServiceImpl 没有被其他类注入过,会报找不到这个class
非Contorller类使用@Service中的方法的更多相关文章
- 非Controller类无法使用Service bean解决方案
尝试方案: 1 在Spring的配置文件springmvc.xml中,增加扫描项base-package="zxs.ssm.util",增加你需要使用service的类所在的包 ...
- android 中activity调用本地service中的方法。
1.自定义一个接口,暴露服务中的方法 public interface IService { /**服务中对外暴露的方法 */ void methodInService();} 2.自定一 ...
- spring非controller类获取service方法
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml"); pushMessageServ ...
- android 中activity调用远程service中的方法之 aidl的使用
服务端:只有服务,没有界面 1.编写interface文件,复制到 .aidl 文件中,并去掉其中的public 等修饰符.系统会自动在gen目录下生成对应的java文件 (对应本地调用中的接口文件 ...
- spring @Service()中初始化方法
@Service(value = "xxxServiceImpl" xxxxxxxx) public class XXXSerivceImpl { public void init ...
- 在Service中抛出异常事务未回滚问题分析与解决
1.问题提出:在service中写方法时,抛出了一个Exception, 本来目的是为了让事务回滚, 但事实上没有回滚,产生了脏数据.代码如下:@Override@Transactionalpubli ...
- android service中stub作用是什么?
AIDL(android 接口描述语言)是一个IDL语言,它可以生成一段代码,可以使在一个android设备上运行的两个进程使用内部通信进程进行交互.如果你需要在一个进程中(例如:在一个Activit ...
- Service中事务不能回滚的解决方式(转)
1.在service方法里面如果对异常进行了捕获的话,该事务是不会进行回滚的 默认spring事务只在发生未被捕获的 runtimeexcetpion时才回滚. spr ...
- 已经mock类中引用的其它service类,但是在invoke私有方法的时候,该service类是空值
错误原因:没有在开始测试用例的时候,初始化类的所有注解方法. 解决方法: 使用mock方法创建mock对象时,需要在测试用例执行前执行以下代码.通常, 这句代码可以放在测试基类或者@Before 中. ...
随机推荐
- ArcFac_C#_DEMO开发
手上有一个项目,需要检验使用本程序的,是否本人!因为在程序使用前,我们都已经做过头像现场采集,所以源头呢是不成问题的,那么人脸检测,人脸比对,怎么办呢?度娘了下,目前流行的几个人脸检测,人脸比对核心, ...
- ethereumjs/browser-builds
https://github.com/ethereumjs/browser-builds ethereumjs - Browser Builds This repository contains br ...
- `ECS弹性计算服务
云服务器(Elastic Compute Service 简称ECS)是一种简单高效,处理能力可弹性伸缩的计算服务.能快速构建更稳定.安全的应用,提升运维效率,降低IT成本. 云服务器ecs作用如下: ...
- Dubbo实践(十六)集群容错
Dubbo作为一个分布式的服务治理框架,提供了集群部署,路由,软负载均衡及容错机制.下图描述了Dubbo调用过程中的对于集群,负载等的调用关系: 集群 Cluster 将Directory中的多个In ...
- HDU Virtual Friends(超级经典的带权并查集)
Virtual Friends Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- DataFrame查找
一 通过索引取数据 (ix/loc/iloc) loc (根据索引名称取数据 , 适合多列) iloc (根据索引序号取数据, 适合多列) at (和loc类似,只用于取单列, 性能更好) ia ...
- 网络测量中基于Sketch方法的调查
目录 LD Sketch SeqHash What's New reversible sketch Count-Sketch和Count-min sketch Diamond Sketch: Accu ...
- GitHub学生认证示范
打开网址:https://education.github.com/ 点击Get Your Pack 点击I am a Student 填写资料上传学生证照片,等待通过,如果没有GitHub账号就注 ...
- iOS项目启动及启动时间优化
app的启动入口Main函数: int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc ...
- PHP 判断密码强度
$score = 0; if(preg_match("/[0-9]+/",$str)) { ...