中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringMVC?bean怎么實現加載控制

發布時間:2022-08-30 11:30:37 來源:億速云 閱讀:193 作者:iii 欄目:開發技術

這篇文章主要講解了“SpringMVC bean怎么實現加載控制”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“SpringMVC bean怎么實現加載控制”吧!

1、Spring配置類排除加載SpringMVC的bean

SpringMVC 通常只需要加載 controller 包內的 bean,而 Spring 需要加載 dao 和 service 包內的 bean,為了省事,Spring 配置類經常設置掃描的包為一個大范圍的包(包含 dao 和 service 在內的包),此時 Spring 會錯誤或者多余地加載到 controller 包內的 bean

使 Spring 排除加載 SpringMVC 的 bean 一般有兩種方法

  • 方法 1:掃描包時精確掃描需要的包,而不用大范圍的掃描

  • 方法 2:大范圍掃描,但是將不需要的 bean 過濾掉

方法 1 示例:

@Configuration
// 使 Spring 只掃描 dao 與 service 包
@ComponentScan({"com.mzz.dao", "com.mzz.service"})
public class SpringConfig {
}

方法 2:在 @ComponentScan 注解中可以設置 excludeFilters 屬性排除掉 不需要的 bean,excludeFilters 屬性的值是一個 Filter 注解,這個注解也在 ComponentScan 內,需要設置 type(過濾類型) 和 classes

下面的示例表示 Spring 的掃描范圍為 com.mzz 但是按注解類型過濾掉所有注解了 @Controller 的 bean

@Configuration
@ComponentScan(value = "com.mzz",
    excludeFilters = @ComponentScan.Filter(
            type = FilterType.ANNOTATION,   // 按照 注解 來進行過濾
            classes = {Controller.class}    // 過濾所有注解了 @Controller 的 bean
    )
)
public class SpringConfig {
}

由于 Filter 注解中 type 的默認值就是 FilterType.ANNOTATION,所以上面的代碼可以簡寫成這樣:

@Configuration
@ComponentScan(value = "com.mzz",
    excludeFilters = @ComponentScan.Filter({Controller.class})
)
public class SpringConfig {
}

[補充]

當 Spring 和 SpringMVC 的配置類同時存在時,上述的方法二可能不會生效,原因是 Spring 進行大范圍掃描時可以掃描到 SpringMVC 的配置類,于是 SpringMVC 中的 bean 也被加載到 Spring 中

此時也有兩種解決方法

一是將 SpringMVC 的配置類移動到 Spring 掃描不到的包下(比如 com 包下)

二是 Spring 過濾時也將 SpringMVC 的配置類過濾掉,SpringMVC 的配置類會注解 @Configuration 和 @ComponentScan,可以對其進行過濾

@Configuration
@ComponentScan(value = "com.mzz",
        excludeFilters = @ComponentScan.Filter({Controller.class, ComponentScan.class})
)
public class SpringConfig {
}

2、Servlet容器配置類簡潔開發

public class ServletContainerInitConfig extends AbstractDispatcherServletInitializer {
    // 加載 springMVC 容器配置
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
    // 加載 spring 容器配置
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringConfig.class);
        return ctx;
    }
}

上面的類繼承自 AbstractDispatcherServletInitializer 抽象類,改為繼承 AbstractAnnotationConfigDispatcherServletInitializer 抽象類。則只需將配置類 class 返回即可,而不需要手動創建 Context,如下

public class ServletContainerInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }
    // 加載 springMVC 容器配置
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

感謝各位的閱讀,以上就是“SpringMVC bean怎么實現加載控制”的內容了,經過本文的學習后,相信大家對SpringMVC bean怎么實現加載控制這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广东省| 安达市| 通化市| 米林县| 新津县| 犍为县| 彰化县| 读书| 桃园县| 灵寿县| 大化| 鹿泉市| 水城县| 宝丰县| 太仆寺旗| 麻栗坡县| 达州市| 九江县| 尼玛县| 桐庐县| 松潘县| 新和县| 偃师市| 县级市| 诏安县| 鄯善县| 黔南| 贵定县| 璧山县| 临沭县| 和平区| 襄垣县| 油尖旺区| 昌平区| 肇庆市| 南平市| 扎囊县| 重庆市| 如东县| 紫金县| 金塔县|