文章目录
前言
为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)
二、SpringMVC bean 加载控制
1.bean加载控制
SpringMVC和Spring都只加载对应的bean,因为他们的功能不同,所以要避免Spring加载到SpringMVC的bean
- Controller加载控制与业务bean加载控制
- SpringMVC控制bean
SpringMVC加载的bean为表现层bean,对应的包均在org.example.controller包内
- Spring控制的bean
Spring加载的bean为业务bean(Service)和功能bean(DataSource等)
- Spring 避免加载到 SpringMVC 控制的 bean 的方式
方式一: Spring加载的bean设定扫描范围为org.example,排除掉controller包内的bean
方式二:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等
方式三:不区分Spring和SpringMVC的环境,都加载到同一环境中
2.添加Spring开发环境
(在SpringMVC入门案例的基础上编码,详情见个人主页资源的SpringMVC源码)
- 在pom.xml导入Spring开发相关的坐标
//导入spring框架<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.10.RELEASE</version></dependency>//spring操作数据库<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.10.RELEASE</version></dependency>//spring整合mybatis<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version></dependency>//导入mybatis<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency>//mybatis连接数据库<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency>
- 创建数据层dao接口userDao
publicinterfaceUserDao{@Insert("insert into tbl_user(name,age)values(#{name},#{age})")publicvoidsave(User user);}
- 创建数据层dao实体类User
publicclassUser{private Integer id;private String name;private Integer age;}
- 创建service服务接口UserService
publicinterfaceUserService{publicvoidsave(User user);}
- 创建servide服务接口实现类UserServiceImpl
@ServicepublicclassUserServiceImplimplementsUserService{publicvoidsave(User user){
System.out.println("user service ...");}}
3.SpringMVC bean加载控制
- 创建Spring全局配置类SpringConfig
- 方式一: Spring加载的bean设定扫描范围为org.example,排除掉controller包内的bean
@Configuration@ComponentScan(value="org.example",
excludeFilters [email protected](
type = FilterType.ANNOTATION,
classes = Controller.class))publicclassSpringConfig{}
- 将SpringMvcConfig中的@Configuration注解注释掉,创建模拟测试类App并运行
publicclassApp{publicstaticvoidmain(String[] args){
AnnotationConfigApplicationContext ctx =newAnnotationConfigApplicationContext(SpringConfig.class);
System.out.println(ctx.getBean(UserController.class));}}
我们发现找不到SpringMVC控制的UserController类,过滤成功
- 方式二:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等
@Configuration@ComponentScan({"com.itheima.service","com.itheima.dao"})publicclassSpringConfig{}
- 方式三:不区分加载SpringMVC和Spring的加载环境
//web容器配置类publicclassServletContainersInitConfigextendsAbstractDispatcherServletInitializer{//加载springmvc配置类,产生springmvc容器(本质还是spring容器)protected WebApplicationContext createServletApplicationContext(){
AnnotationConfigWebApplicationContext ctx =newAnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);return ctx;}protected String[]getServletMappings(){returnnewString[]{"/"};}//加载spring配置类protected WebApplicationContext createRootApplicationContext(){
AnnotationConfigWebApplicationContext ctx =newAnnotationConfigWebApplicationContext();
ctx.register(SpringConfig.class);return ctx;}}
4.SpringMVC bean控制相关知识点
- @ComponentScan注解
1.名称:@ComponentScan
2.类型:类注解
3.功能: 设置spring配置类加载bean时的过滤规则
4.属性:includeFilters:加载指定的bean,需要指定类别(type)与具体项(Classes)
excludeFilters属性:设置扫描加载bean时,排除的过滤规则
type属性:设置排除规则,需要指定类别(type)与具体项(Classes)
classes属性:设置排除的具体注解类,当前设置排除@Controller定义的bean
5.范例:
- 加载环境的简化开发
//web配置类简化开发,仅设置配置类类名即可publicclassServletContainersInitConfigextendsAbstractAnnotationConfigDispatcherServletInitializer{protected Class<?>[]getRootConfigClasses(){returnnewClass[]{SpringConfig.class};}protected Class<?>[]getServletConfigClasses(){returnnewClass[]{SpringMvcConfig.class};}protected String[]getServletMappings(){returnnewString[]{"/"};}}
总结
欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下作者,后续还会更新mybatis, springboot,maven高级,微信小程序,等前后端内容的学习笔记。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)
版权归原作者 东离与糖宝 所有, 如有侵权,请联系我们删除。