• Spring 各种注解(@)的含义与认识


    依赖注入,从字面上理解,即是:以注入的方式实现依赖;

    Spring 容器负责创建应用程序中的 bean,并通过 DI(依赖注入)来协调这些对象之间的关系。当描述 bean 如何进行装配(autowired)时,Spring 具有强大的灵活性,提供了以下三种主要的装配机制:

    • 在 XML 中显式配置;
    • 在 Java 中进行显式配置;
      • XXConfig(JavaConfig)
    • 隐式的 bean 发现机制和自动装配;

    • 组件扫描(Component scanning):Spring 会自动发现应用上下文中所创建的 bean;

      • 使用 @Component 注解(annotation)
      • 默认是不扫描的;
    • 自动装配(autowiring):Spring 自动满足 bean 之间的依赖;

    0. basics

    https://blog.csdn.net/zhang854429783/article/details/6785574

    • 属性加上@Autowired后不需要getter()和setter()方法,Spring也会自动注入。
    • @Component、@Repository、@Service、@Controller

      • @Service用于标注业务层组件
      • @Controller用于标注控制层组件(如struts中的action)
      • @Repository用于标注数据访问组件,即DAO组件
      • @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
      @Service  
      public class VentorServiceImpl implements iVentorService {     
      }  
      @Repository  
      public class VentorDaoImpl implements iVentorDao {   
      }  
      • <context:component-scan base-package=”com.eric.spring”>component-scan标签默认情况下自动扫描指定路径下的包(含所有子包),将带有@Component、@Repository、@Service、@Controller标签的类自动注册到spring容器。
    • 接口存在多个实现类的时候必须使用@Qualifier指定注入哪个实现类,否则(只有一个实现类)可以省略,只写@Autowired。

      @Autowired  
      @Qualifier("chinese")  
      private Man man;   

    1. @Bean

    • @Bean 注解将会告诉 Spring 其修饰的方法将会返回一个对象,该方法要注册为 Spring 应用上下文的 bean。

      @Bean
      public Base getDerived() {
          return new Derived();
      }

      默认情况(default)下,bean 的 ID 与带有 @Bean 注解的方法名保持一致。上述代码中,bean 的名字将会是 getDerived,当然也可以指定其他名字:

      @Bean(name="anotherName")
      ...

    2. @Configuration

    • @Configuration, 与 XML 文件描述配置不同,Spring 还支持使用 Java 代码描述配置,这里的 java 类需要被 @Configuration 修饰。

      <?xml ...>
      <bean id="knight" class="....BraveKnight">
          <constructor-arg ref="quest" />
      </bean>
      
      <bean id="quest" class="...SlayDragonQuest">
          <constructor-arg value="#{T(System.out)}" />
      </bean>

      上述 xml 可简单理解为:

      knight() ⇒ new BraveKnight(quest());
      quest() ⇒  new SlayDragonQuest(System.out);

      使用 Java 来描述配置:

      @Configuration
      public class KnightConfig {
          @Bean
          public Knight knight() {
              return new BraveKnight(quest());
          }
          @Bean 
          public Quest quest() {
              return new SlayDragonQuest(System.out);
          }
      }

    3. @Component 与 @ComponentScan

    • @Component,由该注解修饰的类,表明该类会作为组件类,并告知 Spring 为这个类创建 bean;
    • 组件扫描默认是不开启的,需要显示配置 Spring,以命令其去寻找带有 @Component 注解的类,有如下两种配置方式:

      • 配置文件:
      <?xml version="1.0" encoding="UTF-8" ?>
      <beans>
          <context:component-scan base-package="com.spring.jdbc"/>
      </beans>
      • 同一包下,由 @ComponentScan 修饰的类;

    4. @Import

    • 运用的时候需要获取某类对应的bean,此时就需要用到@Import注解。

      // 先创建两个类,不注入到 IOC 容器,,在应用的时候在导入到当前容器中。 
      public class Dog {}
      public class Cat {}
      
      @ComponentScan
      @Import({Dog.class, Cat.class})
      public class App {
          public static void main(String[] args) throws Exception {
              ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
              System.out.println(context.getBean(Dog.class));
              System.out.println(context.getBean(Cat.class));
              context.close();
          }
      }
  • 相关阅读:
    ArchLinux安装(UEFI)
    html+css第三篇
    html+css第二篇
    html+css第一篇
    工作流会用到几张表
    Sql server 删除重复记录的SQL语句
    idea创建 springboot工程(支持jsp)
    sql查询重复数据
    idea中解决整合SSM加载不到dataSource;
    maven私服
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9421177.html
Copyright © 2020-2023  润新知