代码结构如下:

java
//IUserDao
package com.example.dao;
public interface IUserDao {
void getUser();
}
java
//UserDao
package com.example.dao;
public class UserDao implements IUserDao {
@Override
public void getUser() {
System.out.println("查询用户");
}
}
java
//IUserService
package com.example.service;
public interface IUserService {
void getUser();
}
java
//UserService
package com.example.service;
import com.example.dao.IUserDao;
import com.example.dao.UserDao;
public class UserService implements IUserService {
IUserDao userDao = new UserDao();
@Override
public void getUser() {
userDao.getUser();
}
}
java
//test
import com.example.service.IUserService;
import com.example.service.UserService;
public class Test {
@org.junit.Test
public void test(){
IUserService userService = new UserService();
userService.getUser();
}
}
1.xml方式
在resources里新建spring.xml文件
XML
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 1.XML方式 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 让Spring帮我们去new对象,对象直接的依赖也让spring帮我们进行组织 -->
<bean class="com.example.service.UserService">
<!-- 依赖注入 -->
<property name="userDao" ref="userDao"></property>
</bean>
<bean class="com.example.dao.UserDao" name="userDao"></bean>
</beans>
注意:需要在UserService里面写set方法,名称为set加property的name
java
//UserService
package com.example.service;
import com.example.dao.IUserDao;
public class UserService implements IUserService {
//依赖spring注入
IUserDao userDao;
public IUserDao getUserDao() {
return userDao;
}
public void setUserDao(IUserDao userDao) {
this.userDao = userDao;
}
@Override
public void getUser() {
userDao.getUser();
}
}
java
//test
import com.example.service.IUserService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
@org.junit.Test
public void test(){
// 要依赖spring注入,就需要从spring容器中获取UserService
ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("spring.xml");
IUserService service = ioc.getBean(IUserService.class);
service.getUser();
}
}
2.注解方式
修改spring.xml文件
XML
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 2.注解 -->
<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
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 告诉spring注解所在的位置 -->
<context:component-scan base-package="com.example"></context:component-scan>
</beans>
修改UserService 和 UserDao ,test不做修改
java
//UserService
package com.example.service;
import com.example.dao.IUserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
//标识当前类交给spring去new,交给spring进行管理
@Component
public class UserService implements IUserService {
//依赖spring注入
//让spring自动注入进来
@Autowired
IUserDao userDao;
@Override
public void getUser() {
userDao.getUser();
}
}
java
//UserDao
package com.example.dao;
import org.springframework.stereotype.Component;
@Component
public class UserDao implements IUserDao {
@Override
public void getUser() {
System.out.println("查询用户");
}
}
3.JavaConfig方式
不再使用spring.xml 文件,新建JavaConfig类代替spring.xml 文件,UserService 和 UserDao仍使用注解

java
//javaConfig
package com.example.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
// @Configuration = xml配置文件
@Configuration
// @ComponentScan("com.example") = <context:component-scan base-package="com.example"></context:component-scan>
@ComponentScan("com.example")
public class javaConfig {
}
修改test
java
//test
import com.example.config.javaConfig;
import com.example.service.IUserService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Test {
@org.junit.Test
public void test(){
AnnotationConfigApplicationContext ioc = new AnnotationConfigApplicationContext(javaConfig.class);
IUserService service = ioc.getBean(IUserService.class);
service.getUser();
}
}