文章目录
- 前言
- 二、SpringMVC bean 加载控制
- 1.bean加载控制
- 2.添加Spring开发环境
- 3.SpringMVC bean加载控制
- 4.SpringMVC bean控制相关知识点
- 总结
前言
为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)
二、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[]{"/"};
}
}
总结
欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下作者,后续还会更新mybatis, springboot,maven高级,微信小程序,等前后端内容的学习笔记。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)