spring框架的学习(三)—— Spring的bean管理(注解方式)

本文是转载文章,文章的来源:csdn博客
博主:李阿昀
转载文章: Spring的bean管理(注解方式)
转载原文地址:http://blog.csdn.net/yerenyuan_pku/article/details/69663779
转载说明:转载"Spring的bean管理(注解方式)"的前面部分的内容

Spring的bean管理(注解方式)

注解:代码中的特殊标记,注解可以使用在类、方法、属性上面,使用注解可实现一些基本的功能。注解的写法是@注解名称(属性=属性值)

使用注解创建对象

第一步,创建Web项目,引入Spring的开发包 
除了导入Spring基本的Jar包外(可参考《Spring的概述》一文),还须导入Spring注解的Jar包,如下: 
这里写图片描述 
第二步,编写相关的类 
在src目录下创建一个cn.itcast.anno包,并在该包下编写一个User类。

public class User {

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

}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

第三步,创建Spring配置文件

  • 在Spring配置文件中引入约束,如下:

    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context" 
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context.xsd">
       
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 在Spring配置文件中做些事情,即开启注解扫描。

    <!-- 开启注解的扫描。到配置的包里面扫描类、方法、属性上面是否有注解 -->
    <context:component-scan base-package="cn.itcast"></context:component-scan>
       
       
    • 1
    • 2

    注意:也可以这样开启注解扫描,如下:

    <context:annotation-config></context:annotation-config>
       
       
    • 1

    但是这种开启注解扫描的方式,只会扫描属性上面的注解。实际开发中用到的并不多!故不推荐使用。

第四步,在创建对象所在的类上面使用注解实现

@Component(value="user") // 类似于<bean id="user" class="..." />
public class User {

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

}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

如若注解里面属性名称是value,则可以省略,所以上面的User类亦可这样写为:

@Component("user") // 类似于<bean id="user" class="..." />
public class User {

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

}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

public class TestDemo {

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

}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

测试即可。

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....................");
    }

}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

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

public class UserService {
    public void add() {
        System.out.println("service...........");
    }
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5

再创建持久层中的UserDao类:

public class UserDao {
    public void add() {
        System.out.println("dao................");
    }
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5

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

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

    private UserDao userDao;
       
       
    • 1

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

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

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

      @Service("userService")
      public class UserService {
      
          private UserDao userDao;
      
          public void add() {
              System.out.println("service...........");
              userDao.add();
          }
      
      }
           
           
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      @Repository("userDao")
      public class UserDao {
      
          public void add() {
              System.out.println("dao................");
          }
      }
           
           
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    • 在UserService类里面注入UserDao类的对象,使用注解来实现。首先我使用@Autowired注解来实现。

      @Service("userService")
      public class UserService {
      
          @Autowired
          private UserDao userDao;
      
          public void add() {
              System.out.println("service...........");
              userDao.add();
          }
      
      }
           
           
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12

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

      @Service("userService")
      public class UserService {
      
          @Resource(name="userDao")
          private UserDao userDao;
      
          public void add() {
              System.out.println("service...........");
              userDao.add();
          }
      
      }
           
           
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值