Spring的注解开发以及整合junit测试

准备工作

  • 导包
    4+2+spring-aop
    这里写图片描述

  • 导入命名空间(约束)

  • 在配置文件中开启注解开发
    在base-package中填入需要扫描的包,即该包下所有的类,都可以通过注解来完成开发

这里写图片描述

注解开发

  • 将对象注册到容器
    早期spring框架开始注解的时候,使用@Component,后来随着开发人员的提议,就一个@Component,不能够清楚的知道属于那一层的结构,所以后面引入了

    • @Contorller :用于web层
    • @Service :用于service层
    • @Repository :用于dao层
  • 修改对象的作用范围
    使用@Scope(scopeName=” “),scopeName的取值可以为singleton和prototype

  • 为对象注入值 @Value(“”)
    1、通过反射的Field赋值,但是破坏了对象的封装性
    这里写图片描述
    2、通过set方法赋值(推荐)
    这里写图片描述

  • 引用类型注入
    1、自动装配注入
    这里写图片描述
    如果有多个不同的car,就会导致不能注入你想要的引用类型
    这里写图片描述
    这里写图片描述
    为了解决以上的问题,添加与@Autowired搭配使用的@Qualifier(“car2”),这里就表明,要注入引用类型的car2

    2、手动注入,指定注入哪个名称的对象
    这里写图片描述

  • 初始化和销毁
    这里写图片描述

例子:编写一个User类

package cn.itcast.bean;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import javax.xml.ws.RespectBinding;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

//<bean name="user" class="cn.itcast.bean.User"  />
//@Component("user")
//  @Service("user") // service层
//  @Controller("user") // web层
    @Repository("user")// dao层
//指定对象的作用范围
@Scope(scopeName="singleton")
public class User {
    private String name;
    @Value("18")
    private Integer age;

    //@Autowired //自动装配
    //问题:如果匹配多个类型一致的对象.将无法选择具体注入哪一个对象.
    //@Qualifier("car2")//使用@Qualifier注解告诉spring容器自动装配哪个名称的对象

    @Resource(name="car")//手动注入,指定注入哪个名称的对象
    private Car car;

    public Car getCar() {
        return car;
    }
    public void setCar(Car car) {
        this.car = car;
    }
    public String getName() {
        return name;
    }
    @Value("tom")   
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @PostConstruct //在对象被创建后调用.init-method
    public void init(){
        System.out.println("我是初始化方法!");
    }
    @PreDestroy //在销毁之前调用.destory-method
    public void destory(){
        System.out.println("我是销毁方法!");
    }
    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + ", car=" + car + "]";
    }

}

Spring整合junit测试

在测试类上加上注解配置后,在进行测试的时候,spring会自动加载spring容器,可以节约代码。

导包 4+2+aop+test
这里写图片描述

配置注解
这里写图片描述

直接测试即可

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_42780864/article/details/81354935