Spring学习2 - Spring自带Junit单元测试、通过XML、注解将Bean注册到Spring容器上

文章目录

      • 1. Spring自带Junit单元测试
        • 1.1 步骤、以及测试类注解的设置
        • 1.2 代码测试
      • 2. 实例化对象的五种方式 - XML容器配置文件、以及注解
        • 2.1 Class反射进行生成对象
        • 2.2 工厂的静态方法生成对象
        • 2.3 实例化化工厂成员方法生成对象
        • 2.4 实现Spring内置的FactoryBean接口
        • 2.5 测试XML四种方式配置的运行效果
        • 2.6 注解自动注册到Spring容器

1. Spring自带Junit单元测试

好处:自动创建好容器,无需测试者创建Spring容器。所有@Test共享这个容器,而无需每个@Test都需要创建容器

1.1 步骤、以及测试类注解的设置

步骤:

  1. 导入相应的Jar包
    Spring学习2 - Spring自带Junit单元测试、通过XML、注解将Bean注册到Spring容器上_第1张图片
  2. 单元测试类添加两个注解
    • @RunWith(value=SpringJUnit4ClassRunner.class)
    • @ContextConfiguration(“classpath:容器的配置文件路径”)

   @ContextConfiguration()注解有四种写法

@ContextConfiguration()写法
@ContextConfiguration()
在当前包下寻找 - -context.xml结尾的配置文件
@ContextConfiguration('文件名')
当前包下开始查找
@ContextConfiguration('classpath:文件名')
bin目录下开始查找 - 即源文件夹
@ContextConfiguration('file:文件名')
当前项目文件夹下开始查找

1.2 代码测试

Spring学习2 - Spring自带Junit单元测试、通过XML、注解将Bean注册到Spring容器上_第2张图片

Spring学习2 - Spring自带Junit单元测试、通过XML、注解将Bean注册到Spring容器上_第3张图片

Spring学习2 - Spring自带Junit单元测试、通过XML、注解将Bean注册到Spring容器上_第4张图片

  Spring的单元测试

@RunWith(value=SpringJUnit4ClassRunner.class)
@ContextConfiguration("applicationContext.xml")   // 当前包下查找配置文件
public class TestSpringContainer {
	
	@Autowired  // 自动装配 - 无需用户手动初始化、创建对象由Spring容器管理
	User user;
	
	@Test
	public void test1() {
		System.out.println(user.hashCode());
	}
	
	@Test
	public void test2() {
		System.out.println(user.hashCode());
	}
	
}


  运行结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0AI3kWqh-1576776809172)(en-resource://database/13731:1)]

2. 实例化对象的五种方式 - XML容器配置文件、以及注解

利用Spring的内置测试工具进行 – 四种方式的调试

实例化方式:
1. 通过Class反射进行对象生成 - 常用
2. 静态工厂进行对象的生成
3. 实例化工厂进行对象的生成
4. 实现Spring内置的FactoryBean接口进行生成对象 - 较常用

特别说明一下User1、2、3、4的类代码都是一样的,只是修改了类名而已
  User - Bean类

public class User {
	
	String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "User [name=" + name + "]";
	}	
	
}

  Spring容器配置文件


<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	
	<bean id="user" class="top.linruchang.domain.User">bean>
	
	
	<bean id="user2" factory-method="getUser2" class="top.linruchang.domain.User2Factory">bean>
	
	
	<bean id="user3Factory" class="top.linruchang.domain.User3Factory" >bean>
	<bean id="user3" class="top.linruchang.domain.User3" factory-bean="user3Factory" factory-method="getUser3">bean>
	
	
	
	<bean id="user4" class="top.linruchang.domain.User4Factory">bean>
		
beans>

2.1 Class反射进行生成对象

步骤

  1. 定义一个User Bean类

  2. 将上述User Bean全限定名配置在XML文件上 –

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tDbcNong-1576776809181)(en-resource://database/13837:1)]

2.2 工厂的静态方法生成对象

  1. 定义一个User Bean类、以及工厂类(里面包含能获取UserBean对象的静态方法)
  2. 将上述工厂全限定名以及生成UserBean对象配置在XML文件上 –

  静态工厂方法类

public class User2Factory {	
	public static User2 getUser2() {
		return new User2();
	}	
}

2.3 实例化化工厂成员方法生成对象

  1. 定义一个User Bean类、以及工厂类(里面包含能获取UserBean对象的成员方法)

  2. 工厂的实例化交给Spring容器管理:

  3. 定义UserBean对象由哪个工厂生成,以及调用的工厂方法:

  工厂类

public class User3Factory {	
	public User3 getUser3() {
		return new User3();
	}	
}

2.4 实现Spring内置的FactoryBean接口

  1. 定义一个User Bean类、以及工厂类(实现FactoryBean所有方法即可)

  2. 配置文件设置为:


  工厂类

public class User4Factory implements FactoryBean<User4> {
	@Override
	public User4 getObject() throws Exception {
		return new User4();
	}

	@Override
	public Class getObjectType() {
		return User4.class;
	}

	@Override
	public boolean isSingleton() {
		return false;
	}	
}

2.5 测试XML四种方式配置的运行效果

  使用Spring内置的Junit测试工具

@RunWith(value=SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringJunitTest {
	
	@Autowired
	User user;
	
	@Autowired
	User2 user2;
	
	@Autowired
	User3 user3;
	
	@Autowired
	User4 user4;
	
	@Test
	public void test() {
		System.out.println(user);
		System.out.println(user2);
		System.out.println(user3);
		System.out.println(user4);
	}
	
}


  运行结果
Spring学习2 - Spring自带Junit单元测试、通过XML、注解将Bean注册到Spring容器上_第5张图片

2.6 注解自动注册到Spring容器

注册
实例化对象
注解
@Component - 四个功能一样
@Service
@Repository
@SController
@Autowired( 建议 )、@Resource
可放在属性字段上、以及setxx()方法上

`  Spring容器配置文件添加一个扫描语句


<context:component-scan base-package="top.linruchang">context:component-scan>

  Human - Bean源码

@Component
public class Human {	
	@Autowired //当Human实例化时,自动调用这个方法
	public void setDept(Dept dept) {
		System.out.println("dept注入成功:" + dept);
	}	
}

  Dept - Bean源码

@Component
public class Dept {
	String deptno;
	String dname;

  测试代码 - 看是否属性注入成功

@RunWith(value=SpringJUnit4ClassRunner.class)
@ContextConfiguration("applicationContext.xml")
public class DITest {	
	@Autowired    // Spring容器帮你实例化
	Human human;
		
	@Test
	public void test() {
		System.out.println(human);
	}	
}

  运行效果
Spring学习2 - Spring自带Junit单元测试、通过XML、注解将Bean注册到Spring容器上_第6张图片

你可能感兴趣的:(Java,Spring)