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 的值可以不是唯一的。

posted @ 2021-03-12 11:30  CalronLoveRonnie  阅读(56)  评论(0编辑  收藏  举报
AmazingCounters.com