0

次のモジュールがあります。

@Configuration
public class UserHolder {

    @Bean
    @RequestScope
    public IUser getUser() {
         return (IUser)SecurityContextHolder.getContext().getAuthentication();
    }
}

IUserはインターフェースであり、これはこの Bean を使用するすべての java-config モジュールで正常に機能します。@Autowired IUser user

ただし、xml-config を使用した古いプロジェクトがあります。そこでは、Bean はデプロイ時に初期化されますが (これはもちろん null です)、要求時に正しいユーザーを取得するためのプロキシはありません。

私が今書いたこと(明らかに間違っています):

<bean class="...UserHolder" scope="request">
    <aop:scoped-proxy/>
</bean>

XML の UserHolder: getUser で Bean を定義する必要があります。しかし、これはインターフェースを返すので、そこでクラスを定義できません...

<bean class="...UserHolder"></bean>
<bean class"...IUser" scope="request"> <!-- Interface can't be inserted here -->
     <aop:scoped-proxy/>
</bean>

UserHolder を定義するモジュールの Spring バージョンは次のとおりです。

  • 春: 4.2.6.RELEASE
  • 春のセキュリティ: 4.1.0.RELEASE

UserHolder モジュールを使用する xml-config を持つモジュールの Spring バージョンは次のとおりです。

  • 春: 3.2.15.RELEASE
  • 春のセキュリティ: 3.2.9.RELEASE

どんな助けでも大歓迎です!

どうも!

4

1 に答える 1

0

factory-beans でなんとか修正できました:

<bean id="userHolder"
      class="...UserHolder">
</bean>

<bean id="user"
      class="...IUser"
      factory-bean="userHolder"
      factory-method="getUser"
      scope="request"
      primary="true">
    <aop:scoped-proxy/>
</bean>
于 2016-09-22T08:40:20.053 に答える