gpt4 book ai didi

java - 如何在没有组件扫描xml的情况下在spring中配置 Controller ?

转载 作者:行者123 更新时间:2023-11-30 08:57:59 25 4
gpt4 key购买 nike

我必须使用 spring mvc 为银行设计一个超大型项目。我已经选择使用 XML 配置。我关心的是限制服务器的启动时间。将有大约 2000 个 Controller 。

我已经使用组件扫描来扫描@Controller。它运作良好。但是,问题是当我从 XML 中删除组件扫描并在 XML 中手动使用 bean 配置添加 Controller bean 时,它没有在 IOC 容器中创建 Controller 实例。并给我 404 未找到错误。那么如何在不扫描 XML 组件的情况下配置 Controller 。

以下是我的代码示例。有帮助吗?

servlet-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<context:annotation-config/>

<mvc:resources mapping="/resources/**" location="/resources/" />

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".jsp" />
</bean>

<!--<context:component-scan base-package="" />-->
</beans>

root-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

<import resource="dataContext/data-context.xml" />

<bean id="contactSetupController" class="com.stl.afs.ci.cca.controller.ContactSetupController">
<property name="contactSetupDao" ref="contactSetupDao" />
</bean>

<bean id="contactSetupDao" class="com.stl.afs.ci.cca.controller.ContactSetupDao" scope="prototype">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

</beans>

ContactSetupController.java

package com.stl.afs.ci.cca.controller;

import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;


@Controller
@RequestMapping("/contactsetup")
public class ContactSetupController {
private static final Logger logger = LoggerFactory.getLogger(ContactSetupController.class);


private ContactSetupDao contactSetupDao;

public void setContactSetupDao(ContactSetupDao contactSetupDao) {
this.contactSetupDao = contactSetupDao;
}

@RequestMapping(method = RequestMethod.GET)
public String index(ModelMap model) {
contactSetupDao.showDepedency();

model.addAttribute("message", "Hello world! Nice to see you in the planet");
return "ci/contactsetup/index";
}
}

ContactSetupDao.java

package com.stl.afs.ci.cca.controller;

import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
* Created by ARNAB on 1/8/2015.
*/
public class ContactSetupDao {
public ContactSetupDao() {
System.out.println("------DAO------");
}

private SessionFactory sessionFactory;

public void setSessionFactory(SessionFactory sessionFactory) {
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@" + sessionFactory);
this.sessionFactory = sessionFactory;
}

@Transactional(readOnly = true)
public void showDepedency(){
Query query = sessionFactory.getCurrentSession().createSQLQuery("SELECT * FROM customers");
int i = 0;
for (Object o : query.list()) {
i++;
}
System.out.println(i);
}

}

最佳答案

为什么会得到 404 - Not Found 的问题是使用标签 <context:annotation-config/>

<context:annotation-config/>只激活已经在您的应用程序上下文中注册的 bean 上的注释,并为您执行基本的 Autowiring 。它不会自动检测和注册 bean。

所以没有Controllers可供您处理请求。

为了配置 Controller ,您要么切换回context:component-scan无论如何这对你有用(在恢复时考虑采纳 M. Deinum 的建议)通过 HandlerMappings 手动将 Controller 配置到相应的 URL例如SimpleUrlHanslerMapping (不推荐,因为涉及冗长)

附注:请务必阅读 this fabulous post讨论 <context:annotation-config> 之间的差异和 <context:component-scan>

关于java - 如何在没有组件扫描xml的情况下在spring中配置 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27847237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com