控制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即可,如

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

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

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

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

@Configuration
@ComponentScan(value="com.itheima",
    excludeFilters=@ComponentScan.Filter(
        type = FilterType.ANNOTATION,
        classes = Controller.class
    )
)
public class SpringConfig {
}

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

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

获取AnnotationConfigWebApplicationContext对象的简单方法

public class ServletContainersInitConfig extends
    AbstractDispatcherServletInitializer {
        protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new
            AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }
protected String[] getServletMappings() {
    return new String[]{"/"};
}

优化写法:

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

public class ServletContainersInitConfig extends
    AbstractAnnotationConfigDispatcherServletInitializer {
        protected Class<?>[] getRootConfigClasses() {
            return new Class[]{SpringConfig.class};
        }
        protected Class<?>[] getServletConfigClasses() {
            return new Class[]{SpringMvcConfig.class};
        }
        protected String[] getServletMappings() {
            return new String[]{"/"};
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值