Spring框架IOC用到的注解

你的名字 2023-07-06 13:21 169阅读 0赞

本篇文章是我在学习了Spring的课程之后总结而得。

课程链接:https://www.bilibili.com/video/av47952931

目录

一 . 用于生成bean对象并将bean对象存入IOC容器中的注解。

二. 用于注入数据的注解(比如给类属性赋值)

三. 生成配置类的注解和使用配置类生成bean对象的注解。

四. Spring整合Junit的注解。


前言:

  1. IOC容器是Map结构的,因此将bean对象存入IOC容器中要有对应的键值对:key=value。下面所说的beanId就是其中的key。

  2. 注解是有属性名和属性值的,写在注解括号中( @Component(value=”beanId”) ),类似键值对:key=value,当属性名是value时,可以省略该属性名( @Component(“beanId”) )

一 . 用于生成bean对象并将bean对象存入IOC容器中的注解。

1. @Component(“key”) :

作用:写在类名之前,程序运行时会生成一个当前类的对象作为IOC容器中的bean对象。

@Service(“key”) @Repository(value=”key”) @Controller(“key”) :

作用:与@Component作用完全一样,只是为了划分三层架构,@Service用在业务逻辑层(service层),@Repository用在数据 访问层(dao层),@Controller用在表现层(view层)。

  1. @Service(value = "accountService")
  2. public class AccountServiceImpl implements IAccountService {
  3. }

二. 用于注入数据的注解(比如给类属性赋值)

1. @AutoWired

作用:自动按照类型进行注入,即在IOC容器中根据类型进行匹配。

示例:如下图。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2OTE1Njg2_size_16_color_FFFFFF_t_70

注解:首先在IOC容器中找到与变量的数据类型(AccountDaoImpl)相同的bean对象,然后用该bean对象给当前的变量赋值。

如何匹配到多个同类型的bean对象,则把变量名(accountDao)作为beanId进行查找,如果找不到则报错。如下图。

2. @Qualifier

作用:跟@AutoWired连用,根据数据类型+beanId在IOC容器中进行匹配,匹配成功则注入数据。

说明:使用@Autowired是根据数据类型+变量名称在IOC容器中进行匹配,@Autowired是把变量名称作为beanId进行匹配, 而@Qualifier则可以手动指定beanId。

示例:如下图。

20200219131905384.png

3. @Resource

作用:按照beanId注入。可以独立使用。

属性:

name : 用于指定beanId。

示例:如下图。

20200219132144433.png

4. @Value

作用:用于向基本数据类型和String类型的变量(属性)注入数据。

属性:

value:用于指定变量的值。可以使用spring中的EL表达式。

示例:如下图。

2020021913271884.png

注意:对集合类型的数据只能使用XML配置文件进行配置。

三. 生成配置类的注解和使用配置类生成bean对象的注解。

第一部分我们讲到了用@Component来生成bean对象并且存入IOC容器中,我们是通过在自己定义的类上加@Component注解来实现的。

但是有时候我们的bean对象可能来自某个jar包中的类,因为我们无法在jar包中使用@Component来生成bean对象,所以这里引入配置类。

1. @Configuration

作用:指定当前类是配置类。

2. @Bean

作用:把当前方法的返回值作为bean对象存入IOC容器中。

属性:

name:用于指定当前bean的beanId。默认值是方法名称。

value:和name功能一模一样,只是别名而已,所以我们可以省略属性名。

3. @ComponentScan

作用:用于指定在创建IOC容器时要扫描的包。如果包中有类加了注解@Component则生成一个bean对象存入IOC容器中。

属性:

value:指定包名。属性值是一个数组,使用{package1,package2,……,package}可以指定多个包。

basePackages:是value的别名,功能一模一样。所以属性名可以省略。

@Configuration、@ComponentScan和@Bean的示例:如下图。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2OTE1Njg2_size_16_color_FFFFFF_t_70 1

4. @Import

作用:用于导入其他的配置类。导入的类不需要使用注解@Configuration来表示自己是个配置类。

5. @PropertySource

作用:用于导入properties文件。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2OTE1Njg2_size_16_color_FFFFFF_t_70 2

四. Spring整合Junit的注解。

1. @RunWith

作用:Junit提供的一个注解,把原有的main方法替换成spring提供的main方法。

2. @ContextConfiguration

作用:告诉Spring的运行器,Spring的IOC容器创建时是基于XML文件还是配置类。

属性:

locations : 指定xml文件的位置。

classes:指定注解类的位置。

注意:当我们使用Spring5.x版本时要求Junit的jar包必须是4.12以及以上版本。

  1. 示例如图。

20200219141232863.png

发表评论

表情:
评论列表 (有 0 条评论,169人围观)

还没有评论,来说两句吧...

相关阅读

    相关 spring框架IOC

    一、什么是IOC IOC(Inversion of control)控制反转,首先搞清除控制了什么,反转了什么 1、控制对象的创建和销毁,即控制对象的生命周期。 2、