Spring MVC使用java代码配置的问题

最近在学习spring mvc,一直不喜欢用xml配置的方式,通过查找资料,知道了通过注解来用java代码配置的方式。尝试了下,像如下的xml配置:

    <!-- 启动包扫描功能,以便注册带有@Controller、@Service、@repository、@Component等注解的类成为spring的bean -->
    <context:component-scan base-package="net.comet.noxmlconfigspring.controller",
        "net.comet.noxmlconfigspring.service",
        "net.comet.noxmlconfigspring.component" />

    <!-- 身份认证拦截器 -->
    <mvc:interceptors>
        <bean class="net.comet.noxmlconfigspring.component.AuthorizationInterceptor" />
    </mvc:interceptors>

可以用如下的java代码和注解来配置:

@Configuration
@EnableWebMvc
@EnableTransactionManagement
@ComponentScan(basePackages = {
        "net.comet.noxmlconfigspring.controller",
        "net.comet.noxmlconfigspring.service",
        "net.comet.noxmlconfigspring.component"
})
public class WebMvcConfig extends WebMvcConfigurerAdapter {

    @Autowired
    private AuthorizationInterceptor authorizationInterceptor;

    @Autowired
    private CurrentUserMethodArgumentResolver currentUserMethodArgumentResolver;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(authorizationInterceptor);
    }

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        argumentResolvers.add(currentUserMethodArgumentResolver);
        
    }
}

但是对于如下的xml配置:

    <!-- 定义实体的工厂bean -->
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="defaultPersistenceUnit" />
    </bean>

    <!-- 定义事务管理器 -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

    <!-- 定义JPA Repository的存放目录 -->
    <!-- 定义实体工厂的引用 -->
    <!-- 定义事务管理器的引用 -->
    <jpa:repositories base-package="net.comet.noxmlconfigspring.repository"
                      entity-manager-factory-ref="entityManagerFactory"
                      transaction-manager-ref="transactionManager" />

我找了很多资料也没有发现怎样通过注解和java代码的方式的来配置,故此请教大家,谢谢!

阅读 3.6k
1 个回答

假设你需要配置一个 id 为 entityManagerFactory,类型是 org.springframework.orm.jpa.LocalEntityManagerFactoryBean 的 Bean。同时 persistenceUnitName 属性的值是 defaultPersistenceUnit

import org.springframework.orm.jpa.LocalEntityManagerFactoryBean;

public class EntityManagerFactoryConfigure {

    //已经配置好的其他 bean
    @Autowired
    TypeOfPersistenceUnitName persistenceUnitName;
    
    //id,返回值类型一定要对
    @Bean('id=entityManagerFactory')
    public LocalEntityManagerFactoryBean whateverMethodName() {
        LocalEntityManagerFactoryBean bean = new LocalEntityManagerFactoryBean();
        bean.setPersistenceUnitName(persistenceUnitName);
        return bean;
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进