• SSM学习43:SpringMVC不扫描某些bean


    目录

    核心知识点

    2.5.5 设置bean加载控制

    方式一:修改Spring配置类,设定扫描范围为精准范围。

    方式二:修改Spring配置类,设定扫描范围为com.itheima,排除掉controller包中的bean

    创建SpringMVC项目

     目录

    补全目录结构 :添加java项结构

    导入jar包

    添加tomcat运行快捷键

    创建配置类 SpringMvcConfig.class

    编写Controller,Service,Dao,Domain类

    创建Controller类

    创建SpringConfig配置类

    使用配置类ServletConfig替换web.xml

    测试类APP

    运行结果


    核心知识点

    • 加载Spring控制的bean的时候排除掉SpringMVC控制的bean

    具体该如何排除:

    • 方式一:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等

    • 方式二:Spring加载的bean设定扫描范围为com.itheima,排除掉controller包中的bean

    • 方式三:不区分Spring与SpringMVC的环境,加载到同一个环境中[了解即可]

    2.5.5 设置bean加载控制

    方式一:修改Spring配置类,设定扫描范围为精准范围。

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

    说明:

    上述只是通过例子说明可以精确指定让Spring扫描对应的包结构,真正在做开发的时候,因为Dao最终是交给MapperScannerConfigurer对象来进行扫描处理的,我们只需要将其扫描到service包即可。

    方式二:修改Spring配置类,设定扫描范围为com.itheima,排除掉controller包中的bean

    1.  @Configuration
    2.  @ComponentScan(value="com.itheima",
    3.      excludeFilters=@ComponentScan.Filter(
    4.     type = FilterType.ANNOTATION,
    5.          classes = Controller.class
    6.     )
    7.  )
    8.  public class SpringConfig {
    9.  }
    • excludeFilters属性:设置扫描加载bean时,排除的过滤规则

    • type属性:设置排除规则,当前使用按照bean定义时的注解类型进行排除

      • ANNOTATION:按照注解排除

      • ASSIGNABLE_TYPE:按照指定的类型过滤

      • ASPECTJ:按照Aspectj表达式排除,基本上不会用

      • REGEX:按照正则表达式排除

      • CUSTOM:按照自定义规则排除

      大家只需要知道第一种ANNOTATION即可

    • classes属性:设置排除的具体注解类,当前设置排除@Controller定义的bean

    创建SpringMVC项目

     目录

    补全目录结构 :添加java项结构

     

    导入jar包

    将pom.xml中多余的内容删除掉,再添加SpringMVC需要的依赖

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0modelVersion>
    5. <groupId>com.itheimagroupId>
    6. <artifactId>SpringMVCartifactId>
    7. <version>1.0-SNAPSHOTversion>
    8. <packaging>warpackaging>
    9. <name>SpringMVC Maven Webappname>
    10. <url>http://www.example.comurl>
    11. <properties>
    12. <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    13. <maven.compiler.source>1.8maven.compiler.source>
    14. <maven.compiler.target>1.8maven.compiler.target>
    15. properties>
    16. <dependencies>
    17. <dependency>
    18. <groupId>javax.servletgroupId>
    19. <artifactId>javax.servlet-apiartifactId>
    20. <version>3.1.0version>
    21. <scope>providedscope>
    22. dependency>
    23. <dependency>
    24. <groupId>org.springframeworkgroupId>
    25. <artifactId>spring-webmvcartifactId>
    26. <version>5.2.10.RELEASEversion>
    27. dependency>
    28. <dependency>
    29. <groupId>com.alibabagroupId>
    30. <artifactId>druidartifactId>
    31. <version>1.1.16version>
    32. dependency>
    33. <dependency>
    34. <groupId>org.mybatisgroupId>
    35. <artifactId>mybatisartifactId>
    36. <version>3.5.6version>
    37. dependency>
    38. <dependency>
    39. <groupId>mysqlgroupId>
    40. <artifactId>mysql-connector-javaartifactId>
    41. <version>5.1.47version>
    42. dependency>
    43. <dependency>
    44. <groupId>org.springframeworkgroupId>
    45. <artifactId>spring-jdbcartifactId>
    46. <version>5.2.10.RELEASEversion>
    47. dependency>
    48. <dependency>
    49. <groupId>org.mybatisgroupId>
    50. <artifactId>mybatis-springartifactId>
    51. <version>1.3.0version>
    52. dependency>
    53. dependencies>
    54. <build>
    55. <plugins>
    56. <plugin>
    57. <groupId>org.apache.tomcat.mavengroupId>
    58. <artifactId>tomcat7-maven-pluginartifactId>
    59. <version>2.1version>
    60. <configuration>
    61. <port>80port>
    62. <path>/path>
    63. configuration>
    64. plugin>
    65. plugins>
    66. build>
    67. project>

    添加tomcat运行快捷键

    创建配置类 SpringMvcConfig.class

    1. package com.itheima.config;
    2. import org.springframework.context.annotation.ComponentScan;
    3. import org.springframework.context.annotation.Configuration;
    4. @Configuration
    5. @ComponentScan("com.itheima.controller")
    6. public class SpringmvcConfig {
    7. }

    编写Controller,Service,Dao,Domain类

    1. public interface UserDao {
    2. @Insert("insert into tbl_account(name,money)values(#{name},#{money})")
    3. public void save(User user);
    4. }
    5. public class User {
    6. private Integer id;
    7. private String name;
    8. private Integer age;
    9. public Integer getId() {
    10. return id;
    11. }
    12. public void setId(Integer id) {
    13. this.id = id;
    14. }
    15. public String getName() {
    16. return name;
    17. }
    18. public void setName(String name) {
    19. this.name = name;
    20. }
    21. public Integer getAge() {
    22. return age;
    23. }
    24. public void setAge(Integer age) {
    25. this.age = age;
    26. }
    27. @Override
    28. public String toString() {
    29. return "User{" +
    30. "id=" + id +
    31. ", name='" + name + '\'' +
    32. ", age=" + age +
    33. '}';
    34. }
    35. }
    36. public interface UserService {
    37. public void save(User user);
    38. }
    39. @Service
    40. public class UserServiceImpl implements UserService {
    41. public void save(User user) {
    42. System.out.println("user service ...");
    43. }
    44. }

    创建Controller类

    1. package com.itheima.controller;
    2. import org.springframework.stereotype.Controller;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. import org.springframework.web.bind.annotation.ResponseBody;
    5. //@Controller:Springmvc的bean标志
    6. @Controller
    7. public class UserController {
    8. @RequestMapping("/save")
    9. @ResponseBody
    10. public String save(){
    11. System.out.println("郭浩康第一个Sprintmvc项目创建成功");
    12. return "{spring1save()...}";
    13. }
    14. }

    创建SpringConfig配置类

    1. @Configuration
    2. //排除扫描某些包
    3. @ComponentScan(value = "com.itheima",
    4. excludeFilters = @ComponentScan.Filter(
    5. type = FilterType.ANNOTATION,
    6. classes = Controller.class
    7. ))
    8. public class SpringConfig {
    9. }

    使用配置类ServletConfig替换web.xml

    将web.xml删除,换成ServletContainersInitConfig

    1. package com.itheima.config;
    2. import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
    3. public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    4. @Override
    5. protected Class[] getRootConfigClasses() {
    6. return new Class[]{SpringConfig.class};
    7. }
    8. @Override
    9. protected Class[] getServletConfigClasses() {
    10. return new Class[]{SpringmvcConfig.class};
    11. }
    12. @Override
    13. protected String[] getServletMappings() {
    14. return new String[]{"/"};
    15. }
    16. }
    17. //public class ServletConfig extends AbstractDispatcherServletInitializer {
    18. // //加载Springmvc容器
    19. // @Override
    20. // protected WebApplicationContext createServletApplicationContext() {
    21. // AnnotationConfigWebApplicationContext ctx=new AnnotationConfigWebApplicationContext();
    22. // ctx.register(SpringmvcConfig.class);
    23. // return ctx;
    24. // }
    25. 设置请求处理
    26. // @Override
    27. // protected String[] getServletMappings() {
    28. // return new String[]{"/"};
    29. // }
    30. 加载Spring容器
    31. // @Override
    32. // protected WebApplicationContext createRootApplicationContext() {
    33. // return null;
    34. // }
    35. //}

    测试类APP

    1. public class APP {
    2. public static void main (String[] args){
    3. AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
    4. System.out.println(ctx.getBean(UserController.class));
    5. }
    6. }

    运行结果

  • 相关阅读:
    SpringBoot配置第三方专业缓存技术jetcache远程缓存方案和本地缓存方案
    自然语言处理[信息抽取]:MDERank关键词提取方法及其预训练模型----基于嵌入的无监督 KPE 方法 MDERank
    conda配置国内源(已验证速度)
    JSP基础知识
    浅谈泛在电力物联网、能源互联网与虚拟电厂
    第三十八章 持久对象和SQL - 持久类的特殊选项
    Vue基础
    【前端知识之JS】关于数据处理的手写代码汇总
    python中的各种打断方式、终止代码
    Qt中QPropertyAnimation动画效果展示
  • 原文地址:https://blog.csdn.net/weixin_51330376/article/details/127592596