Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 延长弹簧';s默认组件工厂_Spring_Factory - Fatal编程技术网

Spring 延长弹簧';s默认组件工厂

Spring 延长弹簧';s默认组件工厂,spring,factory,Spring,Factory,这是一个简短的例子:我想修改spring实例化我的bean的方式(在本例中,通过创建代理而不是简单地实例化它) 我不能使用Jdk动态代理或cglib来生成代理(如果是这种情况,我可以使用SpringAOP) 在我看来,最好的方法是扩展spring的bean工厂(并告诉spring使用我的工厂),但我在Google上找不到如何做到这一点 有什么想法吗 编辑: 实际上,看起来最标准的方法是使用BeanPostProcessor(),并使该后处理器将bean包装到代理上 如果我们不能在这里找到更好的解

这是一个简短的例子:我想修改spring实例化我的bean的方式(在本例中,通过创建代理而不是简单地实例化它)

我不能使用Jdk动态代理或cglib来生成代理(如果是这种情况,我可以使用SpringAOP)

在我看来,最好的方法是扩展spring的bean工厂(并告诉spring使用我的工厂),但我在Google上找不到如何做到这一点

有什么想法吗

编辑:

实际上,看起来最标准的方法是使用BeanPostProcessor(),并使该后处理器将bean包装到代理上

如果我们不能在这里找到更好的解决方案(我们认为这是一个有价值的问题),我会将此作为答案发布。

您只需扩展

这是最简单的部分

我遇到的困难是:如果您不能使用动态代理或CGLIB,您打算使用什么方法

我的建议?不要。你想象中的“特殊需要”是虚构的,你不会想出比罗德·约翰逊已经为你提供的更好的方法


如果你能给出让我信服的清晰解释,我将删除我的答案。

这里的方法是实现一个BeanPostProcessor(),并使该BeanPostProcessor在“postProcessBeforeInitialization”中将bean包装在代理上

您的Spring上下文中的所有bean都需要实例化为代理吗?是的,我必须将所有bean实例化为代理。我必须在所有方法调用(和返回)上应用代理日志记录,而不使用spring AOP API(我不能使用常规spring AOP的原因在下面的评论中解释)。在这种情况下,是的,BeanPostProcessor是一种方法。我问的原因是,如果您只想为几个bean执行此操作,那么仅为它们使用FactoryBean可能会更容易。我正在维护一个庞大的“遗留”代码库。我不能使用CGLIB,因为我的控制器bean没有空构造函数(所有构造函数都是@Autowired来注入其他控制器),也不能使用动态代理,因为我不想为所有控制器生成接口来满足生成此类代理的要求(我知道应该从一开始就使用接口,但这根本不是我们的现实)。我打算在bean周围设置一个MethodInterceptor来拦截方法调用,并在方面的情况下使用,比如日志记录。无论如何,我现在不打算制定一个比Rod Johnson提供的更好的通用解决方案。我只想提出一个更适合我需要的解决方案。-1扩展AbstractApplicationContext将用于C您可以为处理BeanFactory的方法提供实现,这些方法已经在BeanFactory的具体子类中实现。