1.编写Spring框架核心配置文件applicationContext.xml
在项目目录“/src/main/resources”下新建applicationContext.xml文件,具体代码如下。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.steven.*"></context:component-scan>
</beans>
2.编写业务代码
定义UserDaoImpl和UserServiceImpl,然后在UserServiceImpl中调用UserDaoImpl的saveUser方法。
(1).dao层
在项目目录“/src/main/java/com/steven”下新建dao目录,并在dao目录下新建IUserDao接口和UserDaoImpl实现类,具体代码如下。
public interface IUserDao {
void saveUser();
}
@Repository
public class UserDaoImpl implements IUserDao {
public void saveUser() {
System.out.println("userDao的save方法执行了");
}
}
(2).service层
在项目目录“/src/main/java/com/steven”下新建service目录,并在service目录下新建IUserService接口和UserServiceImpl实现类,具体代码如下。
public interface IUserService {
public void saveUser();
}
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private UserDaoImpl userDao;
public void saveUser() {
userDao.saveUser();
}
}
3.编写测试类
在项目目录“/src/main/java”下新建Test类,具体代码如下。
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
IUserService service = (IUserService) context.getBean("userServiceImpl");
service.saveUser();
}
}
userDao的save方法执行了
4.注解
(1).@Autowired
此注解自动按照类型注入。从容器中寻找符合依赖类型的实例,当使用该注解注入属性时,set方法可以省略。但是因为按照类型匹配,如果容器中有多个匹配的类型,会抛出异常,需要指定引入的实例id。如果找不到匹配的实例,也会抛出异常。
(2).@Qualifier
此注解不能单独使用,它的作用是在按照类型注入的基础之上,再按照Bean的id 注入。如果一个接口有多个实现类,那么就需要@Qualifier指定需要注入的实例id。
@Service
public class UserServiceImpl implements IUserService {
@Qualifier("userServiceImpl")
@Autowired
private UserDaoImpl userDao;
public void saveUser() {
userDao.saveUser();
}
}
(3).@Resource
此注解的作用是指定依赖按照id注入,还是按照类型注入。当只使用注解,不指定注入方式时,默认按照id注入,找不到再按照类型注入。
@Resource //默认按照id注入
@Resource(name="userDao") //按照id注入
@Resource(type="UserDao") //按照类型注入
5.工程目录