携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第26天,点击查看活动详情
上一篇文章我们引入了一个定义为prototype 类型的bean 却无法在每次请求的时候获得到一个全新实例的问题,这篇文章我们顺着这个思路来继续讲述。
问题的解决
在明确了上一篇文章中的问题之后,我们发现,解决问题的关键之处在于如何可以让getNewsFetchBean() 方法每次都可以从容器中拿得到一个新的NewsFetchBean 实例。我们并不想在每次获取实例的时候返回的都是其持有的第一次注入的那个实例。
下面我们给出四种解决方案。
方法注入的实现之java 代码写法要求
在Spring 容器中,有一种称为“方法注入”的方式来解决这个问题。
对于开发者需要做的并不复杂,我们只需要按照Spring 的要求,让getNewsFetchBean() 方法按照符合要求的格式进行声明,然后再配置文件中同样按照符合要求的格式进行配置,然后通过配置文件就可以通知容器:在这个方法在每次被调用的时候,需要返回指定类型的对象实例。
对于符合格式的方法声明的定义如下:
<public | protected> [abstract] <return-type> methodName(no-arguements);
[] 中的内容可写也可以不写
{} 中的内容必须要选择一个
<> 中的内容是必选的
| 是“管道符号”,它的含义是“其中之一”。它表示在一组元素内的一个选项。
这个方法要求是必须能被子类实现或者覆写,因为在实现“方法注入”的时候,容器会使用Cglib 为需要进行方法注入的对象动态生成一个子类的实,然后代替当前的对象。
总结
这篇文章我们引入了方法替换的相关内容,并且说明了方法替换中java 代码的书写方法。后续我们会继续介绍其他的知识。