您的位置:首页 > 编程语言 > Java开发

Spring 接口代理 类代理

2016-03-26 13:14 453 查看
1.Question Description :

when you use @Transactional annotation and @RequiresPermissions annotation (about shiro) together,

you will find the @RequiresPermissions annotation donot work, why?

2. Explain:

It's caused by the Proxy Mechanism of Spring, because the Spring framework preference for Interface Proxy than Class Proxy,

the method of the class ExampleServiceImpl was agented several times.

Let's look the two kinds of Interface.

2.1 @Transactional Annotation:

It was based on the Interface Proxy default, so it will produce Proxy Object One just like ExampleServiceImpl$$;

2.2 @RequiresPermissions :

It was based on the Interface Proxy default too, but it produces Proxy Object Two based on Proxy Object One just like ExampleServiceImpl$$$$,

that is a really Class Proxy.

  2.3 when the two kinds of Proxy way exist together, the Classs Proxy will out of action.

3. Solution:

we should change its Proxy Way, as follows:



and the same time, change the Proxy Way of Spring, as follows:

    


then @RequiresPermissions Annotation works!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: