前言
为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)
二、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
public interface UserDao { @Insert("insert into tbl_user(name,age)values(#{name},#{age})") public void save(User user); }
- 创建数据层dao实体类User
public class User { private Integer id; private String name; private Integer age; }
- 创建service服务接口UserService
public interface UserService { public void save(User user); }
- 创建servide服务接口实现类UserServiceImpl
@Service public class UserServiceImpl implements UserService { public void save(User user) { System.out.println("user service ..."); } }
3.SpringMVC bean加载控制
- 创建Spring全局配置类SpringConfig
- 方式一: Spring加载的bean设定扫描范围为org.example,排除掉controller包内的bean
@Configuration @ComponentScan(value="org.example", excludeFilters = @ComponentScan.Filter( type = FilterType.ANNOTATION, classes = Controller.class ) ) public class SpringConfig { }
- 将SpringMvcConfig中的@Configuration注解注释掉,创建模拟测试类App并运行
public class App { public static void main(String[] args) { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); System.out.println(ctx.getBean(UserController.class)); } }
我们发现找不到SpringMVC控制的UserController类,过滤成功
- 方式二:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等
@Configuration @ComponentScan({"com.itheima.service","com.itheima.dao"}) public class SpringConfig { }
- 方式三:不区分加载SpringMVC和Spring的加载环境
//web容器配置类 public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer { //加载springmvc配置类,产生springmvc容器(本质还是spring容器) protected WebApplicationContext createServletApplicationContext() { AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); ctx.register(SpringMvcConfig.class); return ctx; } protected String[] getServletMappings() { return new String[]{"/"}; } //加载spring配置类 protected WebApplicationContext createRootApplicationContext() { AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); 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配置类简化开发,仅设置配置类类名即可 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[]{"/"}; } }
`博客内容借鉴了bilibili黑马程序员SSM课程资料,如有侵权,请联系作者删除`
总结
欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下作者,后续还会更新mybatis, springboot,maven高级,微信小程序,等前后端内容的学习笔记。