项目里看到有人写了个这个,自己回来照猫画虎写了一个垃圾例子:
实现ApplicationContextAware接口的类:
@Component
public class SpringUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
public static <T> T getBean(String name){
return (T)applicationContext.getBean(name);
}
}
添加component注解,在启动之后spring框架如果发现有实现ApplicationContextAware接口的类,会自动调用setApplicationContext方法将上下文赋值到类中,使用自己定义的getBean方法就可以获得需要的bean了。
一个小应用:
@ApiOperation(value="根据id查询商品" , notes = "查询商品")
@ApiImplicitParams({@ApiImplicitParam(name = "id" , value = "商品id"
, dataType = "int" , paramType = "query" , example = "1" , required = true)})
@ApiResponses({@ApiResponse(code=200,message = "请求成功")})
@RequestMapping(value="/getById",method = RequestMethod.GET)
@ResponseBody
public Account getAccountById(@RequestParam("id") int id){
AccountService service1 = SpringUtil.getBean("accountServiceImpl");
return service1.getById(id);
}
就是一个简单的查询,测试通过。
不过一般好像也没这么写的,都是在controller里注入service接口。。
在其他文章里看到一段话,感觉有一点道理,引用在这里,这可能大概也许就是这个接口的作用了吧:
因为我们在做开发的时候,并不是说在每一个地方都能将属性注入到我们想要的地方去的,比如在Utils使用到dao,我们就不能直接注入了,这个时候就是我们需要封装springContext的时候了,而ApplicationContextAware就起了关键性的作用。