Spring原始注解
Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替xml配置文件可以简化配置,提高开发效率。
Spring原始注解主要是替代<Bean>的配置
注解标志

使用注解进行开发时,需要在applicationContext.xml中配置组件扫描,作用是指定哪个包及其子包下的Bean需要进行扫描以便识别使用注解配置的类、字段和方法。
<!--启动注解驱动,指定对应扫描的路径,也就是资源所在的包-->
<context:component-scan base-package="com.itheima"/>
案例代码
代码
dao层
package com.itheima.dao.impl;
import com.itheima.dao.UserDao;
import com.itheima.service.impl.UserServiceImpl;
import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Repository;
@Repository("userDao")
@DependsOn("userService")
public class UserDaoImpl implements UserDao {
public UserDaoImpl(){
System.out.println("dao running....");
}
public void save() {
System.out.println("user dao running...1");
}
}
service层
package com.itheima.service.impl;
import com.itheima.dao.BookDao;
import com.itheima.dao.UserDao;
import com.itheima.service.UserService;
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 javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
//定义bean,后面添加bean的id
@Component("userService")
//设定bean的作用域
@Scope("singleton")
public class UserServiceImpl implements UserService {
@Value("4")
private int num ;
@Value("itheima")
private String version;
@Autowired
@Qualifier("userDao")
private UserDao userDao;
@Autowired
private BookDao bookDao;
public UserServiceImpl(){
System.out.println("service running....");
}
// public void setNum(int num) {
// this.num = num;
// }
//
// public void setVersion(String version) {
// this.version = version;
// }
public void save() {
System.out.println("user service running..." +num+" "+version);
userDao.save();
bookDao.save();
}
//设定bean的生命周期
@PreDestroy
public void destroy(){
System.out.println("user service destroy...");
}
//设定bean的生命周期
@PostConstruct
public void init(){
System.out.println("user service init...");
}
}
关于@Qualifier:

关于QResource
@Resource相当于@Qualifier+@Autowired
Spring的新注解
使用上面的注解还不能全部替代xml配置文件,还需要使用注解替代的配置如下:
- 非自定义的Bean的配置: <bean>
- 加载properties文件的配置:<contextproperty-placeholder>
- 组件扫描的配置:<context:component-scan>
- <import>

第三方资源的配置类
Spring整合Junit
原始Junit测试Spring的问题
在测试类中,每个测试方法都有以下两行代码:
Applicationcontext ac = new classPathXmlApplicationcontext ( "bean.xm1");
IAccountservice as = ac.getBean ( "accountservice",IAccountservice.class);
这两行代码的作用是获取容器,如果不写的话,直接会提示空指针异常。所以又不能轻易删掉。
问题解决思路
- 让SpringJunit负责创建Spring容器,但是需要将配置文件的名称告诉它
- 将需要进行测试Bean直接在测试类中进行注入
Spring集成Junit的步骤
- 导入spring集成Junit的坐标
- 使用@Runwith注解替换原来的运行期
- 使用contextconfiguration指定配置文件或配置类使用@Autowired注入需要测试的对象
- 创建测试方法进行测试