我有以下情況:是否可以引用使用applicationContext中的@Service創建的bean?
appContext.xml:包含DAO映射器豆(UserMapper,角色映射...)
appContext-security.xml文件:包含需要我服務的一個參考HTTP標籤(UserDetailsService中)
APP-servlet.xml中:包含標籤找到註解
<context:component-scan base-package="com.example.myapp"/>
<mvc:annotation-driven/>
我的服務有@Service( 「服務名」)註解。這意味着bean是由app-servlet.xml創建的。
OpenID登錄需要的UserDetailsService類的工作和UserDetailsService中有一個自動裝配Autowired場(UserService)這是我的appContext-security.xml文件:
<security:http auto-config="true">
<security:intercept-url pattern="/welcome*" access="ROLE_USER, ROLE_ADMIN" />
<security:intercept-url pattern="/user/*" access="ROLE_USER, ROLE_ADMIN" />
<security:intercept-url pattern="/rest/*" access="ROLE_USER, ROLE_ADMIN" />
<security:intercept-url pattern="/admin/*" access="ROLE_ADMIN" />
<security:logout logout-success-url="/" />
<security:openid-login default-target-url="/welcome" authentication-failure-url="/loginfailed" user-service-ref="userDetailsService"/>
<security:form-login login-page="/login" default-target-url="/welcome" authentication-failure-url="/loginfailed" />
<security:access-denied-handler ref="openIdAuthFailureHandler"/>
</security:http>
我猜是因爲它是由創建我不是指的UserDetailsService app-servlet.xml,它是根配置文件(appContext.xml和appContext-security.xml)的子代
如果我嘗試在appContext-security.xml中聲明UserDetailsService,它的autowired字段UserService在調試時爲null :
<bean id="userDetailsService" class="com.example.myapp.service.impl.UserDetailsServiceImpl"/>
難道這是一個解決方案分裂掃描?也許,在appContext.xml中掃描服務並僅在app-servlet中掃描控制器可能是一個好主意,但我不知道它是否合理。
我想通過@Service註釋UserDetailsService並獲得對appContext-security.xml的引用。這是我的主要問題。我可以參考使用appContext-security.xml中的@Service創建的UserDetailservice嗎?如果不是,我需要什麼變化?
正確答案將被投票。
編輯:
我做了以下內容:
appContext.xml:
<context:component-scan base-package="com.example.myapp">
<context:exclude-filter type="regex" expression="com\.example\.myapp\.controller..*"/>
</context:component-scan>
APP-servlet.xml中:
<context:component-scan base-package="com.example.myapp.controller" />
<!-- Enabling Spring MVC configuration through annotations -->
<mvc:annotation-driven />
現在,它的工作原理
爲什麼不只掃描控制器中'app-servlet.xml'中的包和'appContext.xml'中的其餘包?這可能會解決你的問題 – geoand
現在我做到了。謝謝@geonand – mannuk
我會將其添加爲未來讀者輕鬆找到的答案。如果爲了幫助未來的讀者而不麻煩,請接受它 – geoand