最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringMVC整合,出現(xiàn)注解沒有起作用的情況處理

 更新時間:2023年05月25日 11:10:31   作者:高效編程  
這篇文章主要介紹了SpringMVC整合,出現(xiàn)注解沒有起作用的情況及處理,具有很好的參考價值,希望對大家有所幫助。

SpringMVC整合注解沒有起作用

在spring的applicationContext.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:context="http://www.springframework.org/schema/context"
? ? ? ?xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
? ? ? ? http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
? ? <!--啟動注解-->
? ? <context:annotation-config />
? ? <!-- ?base-package 注解所在的包根據(jù)自己的需要劃分注解類使用的范圍 ?-->
? ? <context:component-scan base-package="main.com.talkweb">
? ? ? ? <!--不再管理Controller 注解 ?因為它單獨給mvc-servler.xml去管理-->
? ? ? ? <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
? ? </context:component-scan>
</beans>

明明有啟動注解,但有些注解還是沒起作用

<!--啟動注解-->
? ? <context:annotation-config />

后來發(fā)現(xiàn)原因是:下面這句作與springMVC的controller注解的排除關注時,把掃描注解的返回局限了

原來 base-package=”main.com.talkweb.Controller”:

!-- ?base-package 注解所在的包根據(jù)自己的需要劃分注解類使用的范圍 ?-->
? ? <context:component-scan base-package="main.com.talkweb.Controller">
? ? ? ? <!--不再管理Controller 注解 ?因為它單獨給mvc-servler.xml去管理-->
? ? ? ? <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
? ? </context:component-scan>

現(xiàn)在的包范圍 base-package=“main.com.talkweb”:

!-- ?base-package 注解所在的包根據(jù)自己的需要劃分注解類使用的范圍 ?-->
? ? <context:component-scan base-package="main.com.talkweb">
? ? ? ? <!--不再管理Controller 注解 ?因為它單獨給mvc-servler.xml去管理-->
? ? ? ? <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
? ? </context:component-scan>

注解方式整合SpringMVC

整合SpringMVC分析

web容器在啟動的時候,會掃描每個jar包下的META-INF/services/javax.servlet.ServletContainerInitializer文件,加載這個文件里面指定的類SpringServletContainerInitializer

spring的應用一啟動就會加載WebApplicationInitializer接口下的所有組件并創(chuàng)建對象

WebApplicationInitializer接口下有三個抽象類

AbstractContextLoaderInitializer抽象類:

調用createRootApplicationContext()方法來創(chuàng)建根容器

AbstractDispatcherServletInitializer抽象類

調用createServletApplicationContext()方法創(chuàng)建一個web的IOC容器

調用createDispatcherServlet()方法創(chuàng)建了DispatchServlet

將創(chuàng)建的DispatchServlet添加到ServletContext

AbstractAnnotationConfigDispatcherServletInitializer抽象類

使用注解的方式配置的DispatcherServlet初始化器

該類重寫AbstractContextLoaderInitializer父類的createRootApplicationContext()方法來創(chuàng)建根容器。調用getRootConfigClasses()方法傳入一個配置類

該類還重寫了AbstractDispatcherServletInitializer父類的createServletApplicationContext()方法來創(chuàng)建web的IOC容器。獲取配置類注冊到IOC容器中。

以注解方式來啟動SpringMVC,需要繼承AbstractAnnotationConfigDispatcherServletInitializer,然后實現(xiàn)抽象方法指定DispatcherServlet的配置信息

注解方式整合SpringMVC

自定義容器初始化器

/*web容器啟動的時候創(chuàng)建對象,調用方法來初始化容器以及前端控制器*/
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    /*獲取根容器的配置類,相當于Spring的配置文件,用來創(chuàng)建父容器*/
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{RootConfig.class};
    }
    /*獲取web容器的配置類,相當于SpringMVC的配置文件,用來創(chuàng)建子容器*/
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{AppConfig.class};
    }
    /*獲取DispatcherServlet的映射信息*/
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

子容器配置類

//SpringMVC只掃描Controller,子容器
@ComponentScan(value = "springMVC", includeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Controller.class})
})
public class AppConfig {
}

父容器配置類

//Spring的容器不掃描Controller,必須禁用默認的過濾規(guī)則才會生效,父容器
@ComponentScan(value = "springMVC", excludeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Controller.class})
}, useDefaultFilters = false)
public class RootConfig {
}

Service

@Service
public class HelloService {
    public String sayHello(String name){
        return "hello " + name;
    }
}

Controller

@Controller
public class HelloController {
    @Autowired
    HelloService helloService;
    @ResponseBody
    @RequestMapping("/hello")
    public String hello(){
        String hello = helloService.sayHello("張三");
        return hello;
    }
}

定制SpringMVC

使用@EnableWebMvc開啟SpringMVC定制配置功能,相當于在xml文件中使用<mvc:annotation-driven/>標簽

@ComponentScan(value = {"controller", "service", "config", "springMVC"}, includeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Controller.class})
}, useDefaultFilters = false)
@EnableWebMvc
public class AppConfig {
}

配置組件,包括視圖解析器、視圖映射、靜態(tài)資源映射、攔截器等等

@ComponentScan(value = {"controller", "service", "config", "springMVC"}, includeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Controller.class})
}, useDefaultFilters = false)
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter{
    //定制視圖解析器
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/views/", ".jsp");
    }
    //定制靜態(tài)資源訪問
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        /*相當于在xml配置文件中使用<mvc:default-servlet-handler>標簽,
        * 將SpringMVC處理不了的請求交給Tomcat,這樣靜態(tài)資源就可以訪問了*/
        configurer.enable();
    }
    //定制攔截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
    }
}

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java實現(xiàn)Linux下雙守護進程

    Java實現(xiàn)Linux下雙守護進程

    這篇文章主要介紹了Java實現(xiàn)Linux下雙守護進程的思路、原理以及具體實現(xiàn)方式,非常的詳細,希望對大家有所幫助
    2014-10-10
  • SpringBoot獲取配置文件內容的幾種方式總結

    SpringBoot獲取配置文件內容的幾種方式總結

    大家都知道SpringBoot獲取配置文件的方法有很多,下面這篇文章主要給大家介紹了關于SpringBoot獲取配置文件內容的幾種方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • Java中判斷對象是否相等的equals()方法使用教程

    Java中判斷對象是否相等的equals()方法使用教程

    與==運算符響應,equals()方法也是Java中對對象進行比較的一大方式,要特別注意二者的不同點,這個我們在下文中即將講到,接下來我們就來看一下Java中判斷對象是否相等的equals()方法使用教程
    2016-05-05
  • SpringBoot中的RabbitMQ用法詳解

    SpringBoot中的RabbitMQ用法詳解

    RabbitMQ是一個開源的消息隊列系統(tǒng),它通過AMQP(高級消息隊列協(xié)議)來實現(xiàn)消息的傳遞,SpringBoot是目前非常流行的Java開發(fā)框架,它提供了很多便利性的功能,其中就包括對RabbitMQ的支持,在本文中,我們將介紹如何在SpringBoot中使用RabbitMQ
    2023-07-07
  • Java接口和抽象類實例分析

    Java接口和抽象類實例分析

    這篇文章主要介紹了Java接口和抽象類,實例分析了java接口與抽象類的概念與相關使用技巧,需要的朋友可以參考下
    2015-05-05
  • Java的WeakHashMap源碼解析及使用場景詳解

    Java的WeakHashMap源碼解析及使用場景詳解

    這篇文章主要介紹了Java的WeakHashMap源碼解析及使用場景詳解,Map本身生命周期很長,需要長期貯留內存中,但Map中的Entry可以刪除,使用時可以從其它地方再次取得,需要的朋友可以參考下
    2023-09-09
  • SpringBoot靜態(tài)資源與首頁配置實現(xiàn)原理深入分析

    SpringBoot靜態(tài)資源與首頁配置實現(xiàn)原理深入分析

    最近在做SpringBoot項目的時候遇到了“白頁”問題,通過查資料對SpringBoot訪問靜態(tài)資源做了總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-10-10
  • Java中的DelayQueue源碼解析

    Java中的DelayQueue源碼解析

    這篇文章主要介紹了Java中的DelayQueue源碼解析,一個實現(xiàn)PriorityBlockingQueue實現(xiàn)延遲獲取的無界隊列,在創(chuàng)建元素時,可以指定多久才能從隊列中獲取當前元素,只有延時期滿后才能從隊列中獲取元素,需要的朋友可以參考下
    2023-12-12
  • mybatis輸入映射和輸出映射實例詳解

    mybatis輸入映射和輸出映射實例詳解

    這篇文章主要介紹了mybatis輸入映射和輸出映射,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • Mybatis插件之自動生成不使用默認的駝峰式操作

    Mybatis插件之自動生成不使用默認的駝峰式操作

    這篇文章主要介紹了Mybatis插件之自動生成不使用默認的駝峰式操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11

最新評論

鸡西市| 陇西县| 沅江市| 石渠县| 开阳县| 灵台县| 阿克苏市| 三亚市| 渭源县| 石屏县| 德保县| 福安市| 礼泉县| 即墨市| 乌拉特中旗| 耒阳市| 炉霍县| 沂源县| 特克斯县| 湛江市| 上饶县| 三都| 宜宾市| 盐城市| 志丹县| 巫山县| 乌兰察布市| 伊金霍洛旗| 通榆县| 兴山县| 白朗县| 高平市| 芦山县| 静宁县| 定襄县| 衡东县| 府谷县| 津南区| 鸡东县| 青阳县| 鄄城县|