工程的目录结构以及所需的jar包如下:
1.beans.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 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- The implicitly registered post-processors include AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor,PersistenceAnnotationBeanPostProcessor, as well as the aforementioned RequiredAnnotationBeanPostProcessor.--> <context:annotation-config/> <bean name="userDao1" class="com.bjsxt.dao.impl.UserDAOImpl"></bean> <bean name="userDao2" class="com.bjsxt.dao.impl.UserDAOImpl"></bean> <bean name="userService" class="com.bjsxt.service.UserService"></bean> </beans>
2.接口UserDao
package com.bjsxt.dao; import com.bjsxt.model.User; public interface UserDAO { public void save(User user); }
3.接口的实现UserDaoImpl
package com.bjsxt.dao.impl; import com.bjsxt.dao.UserDAO; import com.bjsxt.model.User; public class UserDAOImpl implements UserDAO { public void save(User user) { System.out.println("test--------"+user.getUsername()); System.out.println("user saved!"); } }
4.编写数据传输User类
package com.bjsxt.model; public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
5.UserService
package com.bjsxt.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import com.bjsxt.dao.UserDAO; import com.bjsxt.model.User; public class UserService { private UserDAO userDAO; public void add(User user) { userDAO.save(user); } public UserDAO getUserDAO() { return userDAO; } /*首先按名称来注入,由于没有名为"userDAO"的bean。所以采用类型来注入,但是com.bjsxt.dao.UserDAO类型的bean有2个,所以会报错。 *处理:搭配@Qualifier来使用,指定注入userDao1,userDao2中那个bean */ @Autowired @Qualifier("userDao2") //指定注入userDao2 public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO; } }
6.编写测试类UserServiceTest
package com.bjsxt.service; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.bjsxt.model.User; public class UserServiceTest { @Test public void testAdd() { /**ApplicationContext是建立在BeanFactory之上的,BeanFactory它只是完成了Bean工厂的一些功能,像Bean的声明周期它都处理不了。而ApplicationContext除了能完成BeanFactory所有的功能之外,还能够完成 一些其他的附加的功能,比如说bean的声明的周期。 */ ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); UserService service = (UserService)ctx.getBean("userService"); User u = new User(); u.setUsername("zhangsan"); u.setPassword("gaoweigang"); service.add(u); } }