Spring的注解开发以及整合junit测试
程序员文章站
2022-07-08 14:46:55
...
准备工作
导包
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”),这里就表明,要注入引用类型的car22、手动注入,指定注入哪个名称的对象
初始化和销毁
例子:编写一个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
配置注解
直接测试即可