我對spring不太熟悉,所以加入了和spring有關的所有東西。spring 4 struts 1.x混合xml和java config
我有一個spring 4 struts 1.x應用程序。
Spring上下文是用struts插件,它指向spring-context.xml
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/spring-context.xml"/>
</plug-in>
在spring-context.xml
我已經配置加載JPA的EntityManager
像這樣:
<context:component-scan base-package="com.epam.testsystem" />
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="primary"/>
</bean>
<!-- Transactions -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
我也有Spring Security的綜合使用
public class SecurityWebApplicationInitializer
extends AbstractSecurityWebApplicationInitializer {
public SecurityWebApplicationInitializer() {
super(SecurityConfig.class);
}
}
和
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
@ImportResource("/WEB-INF/spring-context.xml")
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/welcome.do").hasRole("ADMIN")
.and()
.formLogin()
.loginPage("/login.do")
.loginProcessingUrl("/login")
.failureUrl("/login?error=1")
.permitAll()
.and()
.csrf();
}
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
}
並且它工作沒有錯誤。
現在我決定將EntityManager
的配置移動到java配置。所以我刪除bean定義從spring-context.xml
加入這些豆子SecurityConfig
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setPersistenceUnitName("primary");
return em;
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf){
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}
但現在我得到這個異常:
造成的:org.springframework.beans.factory.BeanCurrentlyInCreationException:錯誤名稱創建豆「的entityManagerFactory 「:請求豆目前正處於創作:是否有一個無法解決的循環引用「
我認爲發生的事情,因爲我在UserDaoImpl
使用@PersistenceContext註解,我之前導入到Java的配置
那麼最簡單的方法是什麼呢?
感謝