zoukankan      html  css  js  c++  java
  • Spring注解

    参考资料:【spring之注解(三)Component】【spring之注解(二)Autowired

    @Bean

    在采用XML配置bean的时候,我们可以使用实例工厂来定义一个Bean,采用@Bean注解我们也可以做到类似的形式。在一个Bean中定义另外一个Bean。这通过在@Component的标注类中对某个方法使用@Bean进行注解。

    如下所示:

     @Bean(name="getService")
     @Qualifier("getService")
     public UserService getService(@Qualifier("userDao") UserDao user){
        UserService ser = new UserServiceIml1();
       
        return ser;
     }
    

    上述定义一个Bean,并定义了Name和Qualifier属性。还可以定义Scope,Lazy等属性。见下个小节。

    其实@Bean更多的是与@Confuguration一起使用,来构建另外一种不同于基于XML的ApplicationContext,即基于注解的,AnnotationConfigApplicationContext

    @Configuration

    Spring提供一种基于注解的applicationContext,实际应用中,它可以和XML的配置联合使用或者各自单独使用。

    下面给一个简单的例子,其他的详细例子见Spring官方文档。

    首先是一个@Configuration 的配置类,定义了两个Bean。

    @Configuration
    public class MyAnnoConfig {
     
       @Bean(name="cDao1")
       public UserDao getConfigDao(){
          return new UserDaoImp();
       }
      
       @Bean(name="cs1")
       public UserService getConfigS(@Qualifier("cDao1") UserDao dao){
         
          UserServiceIml us =new UserServiceIml();
          us.setUserDao(dao);
          return us;
       }
    }
    

    下面是测试函数。

      public class TestAnnoContextMain {
     
       public static void main(String[] args) {
          ApplicationContext  ctx = new AnnotationConfigApplicationContext(MyAnnoConfig.class);
         
          UserService us = ctx.getBean("cs1",UserService.class);
          System.out.println(us.getUser());
       }
    

    @Autowired

    可以“自动装配依赖”。它通过类型自动注入(byType)

    @Autowired可以标注在 字段、set方法和构造函数上,假如说我们例如我们依次有以下配置,并且已经在XML文件中有了bean的定义,以下的三种方式等价,均上自动注入依赖UserDao,可以和前篇使用xml 的注入依赖的方式比较:

    //标注在字段上。
       @Autowired
       private UserDao userDao;
    
    //标注在set方法上。
       @Autowired
       public void setUserDao(UserDao userDao) {
          this.userDao = userDao;
       }
    
     
    
    //标注在构造函数上
       @Autowired
       public UserServiceIml3(UserDao userDao) {
          super();
          this.userDao = userDao;
       }
    
    在XML中bean定义如下:
    
    <bean id="user1" class="com.test.service.UserServiceIml1"/>
     <bean id="user2" class="com.test.service.UserServiceIml2" />
     <bean id="user3" class="com.test.service.UserServiceIml3"/>
    

    @Qualifier

    @Autowired使用byType进行依赖的注入,可能会有多个匹配者(如我们有在Spring容器中有两个userDao的bean),那么这个时候就会抛出异常,因此我们需要更加细粒度的进行控制,这就是@Qualifier 登场的地方。@Qualifier 可以用到字段上,方法参数上,来从“名字”上对aotowired的候选bean进行限制。一般情况下,可以直接使用bean的name来作为@Qualifier的值来限制注入指定的bean. 当然也可以在xml中使用 标签,这么做的好处是Qualifier 的值可以不是唯一的。

  • 相关阅读:
    数1的个数
    找水王2
    书店促销
    返回一个二维整数数组中最大联通子数组的和
    敏捷软件开发读书笔记(三)
    软件工程团队开发——第一次冲刺会议总结
    返回一个二维整数数组中最大联通子数组的和
    结对项目开发电梯调度
    《最后期限》——读书笔记03
    最后期限——阅读笔记2
  • 原文地址:https://www.cnblogs.com/cuiyf/p/14522846.html
Copyright © 2011-2022 走看看