欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用注解配置spring+junit 测试

程序员文章站 2022-03-09 07:57:30
...

使用注解配置spring

步骤:

1、导包:4+2+spring-aop

2、为主配置文件引入新的命名空间(约束)

3、开启使用注解代理配置文件

<!-- 指定扫描cn.itcast.bean报下的所有类中的注解.
	 注意:扫描包时.会扫描指定报下的所有子孙包
 -->
<context:component-scan base-package="cn.itcast.bean"></context:component-scan>

4、在类中使用注解完成配置

将对象注册到容器

@Component("user")
    @Service("user") // service层
    @Controller("user") // web层
    @Repository("user")// dao层

修改对象的作用范围

//指定对象的作用范围
@Scope(scopeName="singleton")

ps:测试一下不同的作用域singleton和prototype的区别

demo如下:

public class Demo {
	@Test
	public void fun1(){	
		//1 创建容器对象
		ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		//2 向容器"要"user对象
		User u1 = (User) ac.getBean("user");
		User u2 = (User) ac.getBean("user");	
		System.out.println(u1==u2);
		//3 打印user对象
		System.out.println(u1);
		ac.close();
	}
}

测试结果:

这是初始化
true
User [name=tom, age=18, car=Car [name=附加迪威龙, color=绿色]]
这是销毁

修改范围:

//指定对象的作用范围
@Scope(scopeName="prototype")

测试结果:

这是初始化
这是初始化
false
User [name=tom, age=18, car=Car [name=附加迪威龙, color=绿色]]

这里稍微写一下两者区别:

这里的scope就是用来配置spring bean的作用域,它标识bean的作用域。

  • 1、singleton  当把一个bean定义设置为singleton作用域时,Spring IOC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例,一个bean被标识为singleton时候,spring的IOC容器中只会存在一个该bean。

  • 2、prototype prototype作用域部署的bean,每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)都会产生一个新的bean实例,相当于一个new的操作。

简单的说:
singleton 只有一个实例,也即是单例模式
prototype访问一次创建一个实例,相当于new。 

一般情况下,有状态的bean需要使用prototype模式,而对于无状态的bean一般采用singleton模式(一般的dao都是无状态的)。

状态场景:

每次调用bean的方法,singleton多次调用bean实际上使用的是同一个singleton对象,而且保存了对象的状态信息。prototype都会提供一个新的对象(重新new),并不保存原有的实例。

值类型注入

-------------通过反射的Field赋值,破坏了封装性:

@Value("tom")
private String name;

-----------通过set方法赋值,推荐使用:

@Value("tom")	
public void setName(String name) {
	this.name = name;
}

引用类型注入

//@Autowired //自动装配
//问题:如果匹配多个类型一致的对象.将无法选择具体注入哪一个对象.
//@Qualifier("car2")//使用@Qualifier注解告诉spring容器自动装配哪个名称的对象
 
@Resource(name="car")//手动注入,指定注入哪个名称的对象(重点)
private Car car;

初始化和销毁方法

@PostConstruct //在对象被创建后调用.init-method
public void init(){
	System.out.println("我是初始化方法!");
}
@PreDestroy //在销毁之前调用.destory-method
public void destory(){
	System.out.println("我是销毁方法!");
}

 

spring与junit整合测试

一、导包:4+2+aop+test

二、配置注解和测试

//帮我们创建容器
@RunWith(SpringJUnit4ClassRunner.class)
//指定创建容器时使用哪个配置文件
@ContextConfiguration("classpath:applicationContext.xml")
public class Demo {
    //将名为user的对象注入到u变量中
    @Resource(name="user")
    private User u;
    
    @Test
    public void fun1(){        
        System.out.println(u);
    }
}

上图:

使用注解配置spring+junit 测试

相关标签: spring