当前位置:网站首页>控制bean的加载
控制bean的加载
2022-08-03 06:34:00 【bobo洁厕灵】
在配置类(*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",
[email protected](
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[]{"/"};
}
}
边栏推荐
- 信息学奥赛一本通T1448:深搜的剪枝技巧 电路维修
- (十五)51单片机——呼吸灯与直流电机调速(PWM)
- 解决plt.imshow()不显示图片cv2.imshw()不显示图片
- 多线程案例
- HCIP笔记整理 2022/7/18
- 数仓埋点体系与归因实践
- 9月考,如何选择靠谱正规的培训机构?
- QT信号与槽
- El - tree set using setCheckedNodessetCheckedKeys default check nodes, and a new check through setChecked specified node
- 【图像边缘检测】基于matlab灰度图像的积累加权边缘检测【含Matlab源码 2010期】
猜你喜欢
随机推荐
华为设备配置BFD多跳检测
戳Web3的神话?戳到铁板。
解读 refresh 十二步骤
Flutter | 判断 Text 组件是否显示完
1066 Root of AVL Tree // AVL平衡二叉搜索树模板
spark中的cache和checkpoint
MySQL忘记密码怎么办
Sqoop 导入导出 Null 存储一致性问题
从学生到职场的转变
boot - SSE
HCIP笔记整理 2022/7/18
商业智能BI业务分析思维:供应链分析 – 如何控制牛鞭效应(二)
Cesium loads offline maps and offline terrain
解决登录vCenter提示“当前网站安全证书不受信任“
测试用例设计方法之因果图详解
FiBiNet torch reproduction
死锁的成因和对应的解决方案
信息学奥赛一本通T1450:Knight Moves
JS作用对象API技巧
excel高级绘图技巧100讲(二十一)- Excel层叠柱形图