zoukankan      html  css  js  c++  java
  • 组件扫描相关知识

    组件扫描:
      指定一个包路径,Spring会自动扫描该包及其子包所有组件类,当发现组件类定义前有特定的注解标记时,就将该组件纳入到Spring容器。等价与原有XML配置中的<bean>定义功能。

    组件扫描可以替代大量XML配置的<bean>定义
    1.指定扫描类路径
      使用组件扫描,首先需要在XML配置中指定扫描类路径
      <context:component-scan base-package="org.example">
      上面配置,容器实例化时会自动扫描org.example包及其子包下所有组件类


    2.自动扫描的注解标记
      指定扫描类路径后,并不是该路径下所有组件类都扫描到Spring容器,只有在组件类定义前面有以下注解标记时,才会扫描奥Spring容器
    注解标记描述
    @Component 通用注解
    @Name 通用注解
    @Repository 持久化层组件注解
    @Sercive 业务层组件注解
    @Controller 控制层组件注解


    3.自动扫描组件的命名
      当一个组件在扫描过程中被检测到时,会生成一个默认id值,默认id值为小写字母开头的类名。也可以在注解标记中自定义id,下面两个组件id名字分别是oracleUserDao和loginService

    eg:

      @Repository
      public class OracleUserDao implement UserDao{
        //...
      }
      @Service("loginService")
      public class UserService{
        //...
      }
    4.指定组件的作用域
      通常收Spring管理的组件,默认的作用域是“singleton”。如果需要其他的作用域可以使用@Scope注解,只要在注解中提供作用域的名称即可
      eg: @Scope("prototype")
        @Repository
        public class OracleUserDao implements EmpDao{
          //...
        }
    5.初始化和销毁回调函数的控制
     @PostConstruct和PreDestroy注解分别用于指定初始化和销毁回调方法。
     eg: public class ExampleBean{
       @PostConstruct
       public void init(){
         //初始化回调方法
       }
      }
      
     @PreDestroy
       public void destroy(){
        //销毁回调方法
      }
    6.指定依赖注入关系
      具有依赖关系的Bean对象,利用下面任意一种注解都可以实现
      1> @Resource
        用在字段定义或Setter方法定义前面,默认首先按名称匹配注入,然后按内型匹配
        eg: public class UserService{
          //@Resource
           private UserDao userDao;
           @Resource
          public void setUserDao(UserDao dao){
            this.userDao = dao;
            }
           }
      当遇到多个匹配Bean是注入会发生错误,可显式指定名称,
      例如 (@Resource(name=""empDao1))

      2> @Autowired/@Qualifier
        用在字段定义或setter方法定义前面,默认按类型匹配注入
        public class UserService{
          //@Autowired
          private UserDao userDao;
          @Autowired
          public void setUserDao(UserDao dao){
          this.userDao = dao;
          }
        }
      当@Autowired遇到多个匹配Bean是注入会发生错误,可指定名称,
       public class UserService{
        //@Autowired
        //@Qualifier("mysqlUserDao")
          private UserDao userDao;

        @Autowired
          public void setUserDao(@Qualifier("mysqlUserDao")
          UserDao dao){
            this.userDao = dao;
            }
          }

     
    3> @Inject/@Named
      @Inject注解标记是Spring3.0开始添增的对JSR-330标准的支持,使用前需要导包(JSR-330.jar),使用方法与@Autowired相似
      当@Inject遇到多个匹配Bean是注入会发生错误,可使用@Named指定名称限定,使用方法与@Autowired的@Qualifier类似。

    6.注入Spring表达式值

      @Value注解可以注入Spring表达式值,使用方法如下:
      1>首先在XML配置中指定要注入的 properties文件
          <util:properties id="jdbcProps"
                location="classpath:db.properties"/>
      2>然后在setter方法前使用@Value注解
          public class JDBCDataSource{
            @Value("#{jdbcProps.url}")
            private String url;
            @Value("#{jdbcProps.driver}")
            public void setUrl(String driver){
              … …
              }
            }


  • 相关阅读:
    【JAVA与C#比较】其它
    C#和java之间的一些差异与共性
    C#与Java的语法差异
    关于npm本地安装模块包(node_modules),安装不了的问题
    vue
    vue
    vue
    vue
    v
    vue -model
  • 原文地址:https://www.cnblogs.com/xuzhuteng/p/4764820.html
Copyright © 2011-2022 走看看