@Autowired、@Resource、@Inject区别以及@Component和@Autowired的区别以及Spring的单元测试

@Autowired、@Resource、@Inject三者都是自动装配的意思:

@Autowired:最强大,而且是spring独有的,离开了spring就没有用了

@Resource:j2ee,这是Java的标准,resource的扩展性就很强如果切换成另外一个容器框架,@Resource还是可以用的

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@Component的作用:
表示这个 Class 是一个自动扫描组件,当组件不好归类的时候,我们可以使用这个注解进行标注,相当于配置文件中的创建了一个bean

<bean id="" class=""/>

@Autowired的作用:
它可以对类成员变量、方法和构造函数就行标注,完成自动装配。通过@Autowired的使用来消除set , get 方法

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
讲一个带有错误的案例:
看代码:

package com.atshiyou.test;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;

import com.atshiyou.service.BookService;
import com.atshiyou.servlet.BookServlet;

@Component
class IocTest {

	ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
	
	@Autowired
	private BookServlet bookServlet;
	@Test
	public void test2() {
	
		System.out.println(bookServlet);
		
	}

将测试的Java文件,添加上注解@Compoent,然后创建了bookServlet。测试输出bookServlet,发现控制台不停的输出,陷入了无限循环,问是怎么回事?????
在这里插入图片描述
答:当你运行test2()这个方法,单元测试Junit会创建一个IOCTest对象,创建IOCTest对象的时候,会new ioc 容器,ioc容器一但new了,启动就会扫描所有的组件,扫描所有组件就会为每一个组件创建对象,创建到IOCTest的时候又发现要new 一个ioc容器。ioc容器一启动又来扫描所有组件,循环反复
在这里插入图片描述
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
根据上面错误的实例,引入spring的单元测试。

故事背景:在测试getBean的时候,要写:
BookServlet bean = (BookServlet) ioc.getBean(“bookServlet”);
很麻烦。所以引入了spring的单元测试。

  • 使用Spring的单元测试
  • 1、导包:Spring的单元测试包 spring-test-4.3.9.RELEASE.jar
  • 2、@ContextConfiguration(locations = “”)使用它来指定Spring的配置文件的位置
  • 3、@RunWith指定哪种驱动进行单元测试,默认就是Junit
    @RunWith(SpringJUnit4ClassRunner.class)
  •  		使用Spring的单元测试模块来执行标了@Test注解的测试方法
    
  •  		以前Test注解是由Junit来执行的
    
  •  		好处:我们不用ioc.getBean()来获取组件了,直接@Autowired组件
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你在狗叫什么、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值