使用注解配置spring+junit 测试
使用注解配置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);
}
}
上图:
上一篇: 【LeetCode】 链表
下一篇: vue 登录注册界面之间的跳转
推荐阅读
-
15.junit测试类使用及注解
-
Sping MVC不使用任何注解处理(jQuery)Ajax请求(基于XML配置)
-
PHP单元测试配置与使用方法详解
-
SaltStack 安装使用测试教程之简单安装与配置(CentOS7)
-
SpringBoot中@Value注解默认值使用及效果测试
-
SpringBoot整合使用tk.mybatis配置及测试
-
MyBatis3使用注解配置SQL映射器
-
spring boot中关于获取配置文件注解的使用@ConfigurationProperties、@Value、@PropertySource
-
使用注解配置SpringMVC
-
配置动态刷新RefreshScope注解使用局限性(一)