Spring通过实现getBean方法获得Bean的实例

本文介绍了解决Resteasy拦截器中的Service成员变量为空的问题。通过在拦截器方法中使用Spring的getBean方法来获取Service实例,实现了拦截器与Spring环境的无缝整合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在写spring+resteasy的项目,要拦截app的所有请求,用的拦截器是resteasy的拦截器,但是resteasy得拦截器必须要在web.xml中声明,然后拦截器里面的里面的service属性一直为空。后来将service这个成员变量去掉,选择在拦截器的方法中通过spring的getBean方法获取,代码如下:

原来的代码如下:

@Provider  
@ServerInterceptor
@Precedence("END")
public class AppRequestInterceptor implements PreProcessInterceptor,  AcceptedByMethod {

	@Autowired
	private AddOnArticleService addOnArticleService;
	
	public ServerResponse preProcess(HttpRequest request, ResourceMethod method)
			throws Failure, WebApplicationException {
		System.out.println(request.getPreprocessedPath());
		System.out.println(request.getHttpMethod());
		System.out.println(method);
		
		System.out.println("addOnArticleService------"+addOnArticleService">);
	
		return null;
	}

	public boolean accept(Class declaring, Method method) {
		return true;
	}

}
其中的  addOnArticleService     一直为空


之后的解决办法如下:

在方法中调用的代码,通过获取getBean获取service实例:


public ServerResponse preProcess(HttpRequest request, ResourceMethod method)
			throws Failure, WebApplicationException {
		
	
		aboutUsService = (AboutUsService)ApplicationContextHandle.getBean("aboutUsService");
		System.out.println("ApplicationContextHandle.getBean(aboutUsService)------"+aboutUsService.getAboutUs());
		
		return null;
	}
建立一个实现 org.springframework.context.ApplicationContextAware 接口的类:

public class ApplicationContextHandle implements ApplicationContextAware{  
    private static ApplicationContext applicationContext;  
      
    @Override  
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {  
        ApplicationContextHandle.applicationContext = applicationContext;  
    }  
  
    /**  
     * 获取对象  
     * 这里重写了bean方法,起主要作用  
     * @param name  
     * @return Object 一个以所给名字注册的bean的实例  
     * @throws BeansException  
     */    
    public static Object getBean(String name) throws BeansException {  
        return applicationContext.getBean(name);    
    }  
} 

注意,需要在spring的配置文件中配置:

<bean class="com.flare.interceptor.ApplicationContextHandle" lazy-init="false"/>  



参考链接:http://blog.youkuaiyun.com/lpy3654321/article/details/42920997


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值