• 控制bean的加载


    在配置类(*config)中,需要加载资源(component-sacn)

    controller、service和dao这些类都需要被容器管理成bean对象,SpringMVC或者Spring加载这些bean可以控制加载要求

    让实现类bean对应的功能能够被需要这个功能的框架来加载这个实现类bean

    SpringMVC加载其相关bean(表现层bean),也就是controller包下的类

    Spring控制的bean

            业务bean(Service)

            功能bean(DataSource,SqlSessionFactoryBean,MapperScannerConfigurer等)

    如何让Spring,SpringMVC加载各自的内容?

    在SpringMVC的配置类SpringMvcConfig中使用注解@ComponentScan,只需要将其扫描范围设 置到controller即可,如

    1. @Configuration
    2. @ComponentScan("com.itheima.controller")
    3. public class SpringMvcConfig {

    在Spring的配置类SpringConfig中使用以下方式,避开controller

    1. @Configuration
    2. @ComponentScan({"com.itheima.service","comitheima.dao"})
    3. public class SpringConfig {
    4. }

    也可以通过以下方式避开controller

    1. @Configuration
    2. @ComponentScan(value="com.itheima",
    3. excludeFilters=@ComponentScan.Filter(
    4. type = FilterType.ANNOTATION,
    5. classes = Controller.class
    6. )
    7. )
    8. public class SpringConfig {
    9. }

    注意,SpringMVC的配置类如果在Spring配置类的扫描范围之下,情况发生变化,因为你在Spring的配置类中设置避开扫描controller,但是扫描到了SpringMVC的配置类,这个配置类中可以扫描到controller。

    解决办法是将SpringMVC的配置类移出Spring的扫描范围

    获取AnnotationConfigWebApplicationContext对象的简单方法

    1. public class ServletContainersInitConfig extends
    2. AbstractDispatcherServletInitializer {
    3. protected WebApplicationContext createServletApplicationContext() {
    4. AnnotationConfigWebApplicationContext ctx = new
    5. AnnotationConfigWebApplicationContext();
    6. ctx.register(SpringMvcConfig.class);
    7. return ctx;
    8. }
    9. protected String[] getServletMappings() {
    10. return new String[]{"/"};
    11. }

    优化写法:

    将AbstractDispatcherServletInitializer更换为AbstractAnnotationConfigDispatcherServletInitializer   ,再实现接口的三个方法,登记注册类,以下三个方法中的写法更为方便,不需手动的register配置类

    1. public class ServletContainersInitConfig extends
    2. AbstractAnnotationConfigDispatcherServletInitializer {
    3. protected Class[] getRootConfigClasses() {
    4. return new Class[]{SpringConfig.class};
    5. }
    6. protected Class[] getServletConfigClasses() {
    7. return new Class[]{SpringMvcConfig.class};
    8. }
    9. protected String[] getServletMappings() {
    10. return new String[]{"/"};
    11. }
    12. }

  • 相关阅读:
    Launcher启动过程
    基于PHP的网络教学平台设计与实现
    zemax西德莫尔目镜
    [Java反序列化]—Jackson反序列化
    GO语言开山篇(三):Go语言特点
    RocketMQ运维工具
    MyBatis学习(二):补充
    大二Web课程设计期末考试——基于HTML+CSS+JavaScript+jQuery电商类化妆品购物商城
    STM32F103VET6基于STM32CubeMX利用EXTI外部中断测量PWM频率
    git 泄露
  • 原文地址:https://blog.csdn.net/cvpatient/article/details/126015802