2-2 Spring的bean管理中常用的注解(类,属性)

@Component(作用在类上)

创建对象的注解有四个:

  1. @Component
  2. @Repository:用于对DAO实现类进行标注(持久层)。
  3. @Service:用于对Service实现类进行标注(业务层)。
  4. @Controller:用于对Controller实现类进行标注(WEB层)。

后三个注解是Spring中提供的@Component的三个衍生注解(功能目前来讲是一样的),它们是为了让标注类本身的用途更清晰,Spring在后续的版本中会对其进行增强。


bean的作用范围的注解

@Scope

  • singleton:单例,默认值
  • prototype:多例

所以我们可通过注解设置创建对象是单例或者还是多实例的。这样User类的代码亦可写为:

@Service("user")
@Scope("singleton")
public class User {

    public void add() {
        System.out.println("add....................");
    }

}


使用注解注入属性(对象)

这儿,我举个例子来说明如何使用注解注入(对象类型的)属性。 
先创建业务层中的UserService类:

public class UserService {
    public void add() {
        System.out.println("service...........");
    }
}

再创建持久层中的UserDao类:

public class UserDao {
    public void add() {
        System.out.println("dao................");
    }
}

以上两个类都创建在cn.itcast.anno包中。我们要实现的目的是在UserService类里面调用UserDao类的方法,这样我们就要在UserService类里面得到UserDao类的对象。之前是采用xml配置文件的方式来注入属性的,本文将使用注解的方式完成注入属性的操作。

  1. 在UserService类里面定义UserDao类型属性

    private UserDao userDao;

    在UserService类里面定义UserDao类型的属性,由于是使用注解的方式,故不需要手动生成set方法。

  2. 进行注解方式实现属性注入

    • 创建UserDao类的对象和UserService类的对象

      @Service("userService")
      public class UserService {
      
          private UserDao userDao;
      
          public void add() {
              System.out.println("service...........");
              userDao.add();
          }
      
      }

      @Repository("userDao")
      public class UserDao {
      
          public void add() {
              System.out.println("dao................");
          }
      }

    • 在UserService类里面注入UserDao类的对象,使用注解来实现。首先我使用@Autowired注解来实现。

      @Service("userService")
      public class UserService {
      
          @Autowired
          private UserDao userDao;
      
          public void add() {
              System.out.println("service...........");
              userDao.add();
          }
      
      }

      注意:使用注解@Autowired,它不是根据名字去找Dao(也就是该部分@Service("userService")),而是默认按类型进行装配。 
      当然了,也可使用@Resource注解来实现,如下:

      @Service("userService")
      public class UserService {
      
          @Resource(name="userDao")
          private UserDao userDao;
      
          public void add() {
              System.out.println("service...........");
              userDao.add();
          }
      
      }

      注意,使用@Resource注解,它默认是按名称进行注入的。在实际开发中,我们也是使用@Resource注解来注入属性的,注解@Autowired用到的并不多。


编写测试类 
在cn.itcast.anno包下编写一个TestDemo单元测试类。

public class TestDemo {

    @Test
    public void testService() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        UserService userService = (UserService) context.getBean("userService");
        System.out.println(user);
        userService.add();
    }

}

测试即可。


猜你喜欢

转载自blog.csdn.net/qq_38793958/article/details/80323101
2-2
今日推荐