项目结构图
代码
User.java
package org.spring.bean;
public class User {
private int id;
private String name;
public User() {
}
public User(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "id="+id+", name="+name;
}
}
UserDAOInter.java
package org.spring.dao.inter;
import org.spring.bean.User;
public interface UserDAOInter {
public void add(User user);
public void delete(int id);
public User load(int id);
}
UserDAOImpl.java
package org.spring.dao.impl;
import org.spring.bean.User;
import org.spring.dao.inter.UserDAOInter;
public class UserDAOImpl implements UserDAOInter {
@Override
public void add(User user) {
System.out.println("添加了用户:"+user);
}
@Override
public void delete(int id) {
System.out.println("删除了用户:"+id);
}
@Override
public User load(int id) {
System.out.println("加载了用户:"+id);
return null;
}
}
UserServiceInter.java
package org.spring.service.inter;
import org.spring.bean.User;
public interface UserServiceInter {
public void add(User user);
public void delete(int id);
public User load(int id);
}
UserServiceImpl.java
package org.spring.service.impl;
import org.spring.bean.User;
import org.spring.dao.impl.UserDAOImpl;
import org.spring.service.inter.UserServiceInter;
public class UserServiceImpl implements UserServiceInter {
private UserDAOImpl userDAOImpl;
public UserDAOImpl getUserDAOImpl() {
return userDAOImpl;
}
public void setUserDAOImpl(UserDAOImpl userDAOImpl) {
this.userDAOImpl = userDAOImpl;
}
@Override
public void add(User user) {
userDAOImpl.add(user);
}
@Override
public void delete(int id) {
userDAOImpl.delete(id);
}
@Override
public User load(int id) {
return userDAOImpl.load(id);
}
}
UserAction.java
package org.spring.action;
import java.util.List;
import org.spring.bean.User;
import org.spring.service.impl.UserServiceImpl;
public class UserAction {
private User user;
private UserServiceImpl userServiceImpl;
private int id;
private List<String> names;
// public UserAction(UserServiceImpl userServiceImpl) {
// this.userServiceImpl = userServiceImpl;
// }
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public UserServiceImpl getUserServiceImpl() {
return userServiceImpl;
}
public void setUserServiceImpl(UserServiceImpl userServiceImpl) {
this.userServiceImpl = userServiceImpl;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public List<String> getNames() {
return names;
}
public void setNames(List<String> names) {
this.names = names;
}
public void add(){
System.out.println(names);
userServiceImpl.add(user);
}
public void delete(){
userServiceImpl.delete(id);
}
public void load(){
userServiceImpl.load(id);
}
}
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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="byName"> --> <!-- 指定整个配置文件的自动注入方式 -->
<!-- 属性值的注入,使用value而不是ref -->
<bean name="user" class="org.spring.bean.User">
<property name="id" value="2"/>
<property name="name" value="八戒"/>
</bean>
<bean id="userDAOImpl" class="org.spring.dao.impl.UserDAOImpl"/>
<bean id="userServiceImpl" class="org.spring.service.impl.UserServiceImpl">
<!-- name="userDAOImpl"表示具体注入时会调用userServiceImpl对象的setUserDAOImpl()方法来完成注入 -->
<!-- ref="userDAOImpl"表示注入的对象是配置文件中的id为userDAOImpl的对象 -->
<property name="userDAOImpl" ref="userDAOImpl"/>
</bean>
<!-- 对于UserAction,里面的属性会根据不同的线程得到不同的值,所以应该用多例(默认是单例) -->
<bean id="userAction" class="org.spring.action.UserAction" scope="prototype">
<property name="user" ref="user"/>
<property name="userServiceImpl" ref="userServiceImpl"/>
<property name="id" value="1"/>
<property name="names">
<list>
<value>张三</value>
<value>李四</value>
<value>王五</value>
<value>赵六</value>
</list>
</property>
</bean>
<!-- 通过构造函数完成注入,需要传入构造函数的参数(不常用) -->
<!-- <bean id="userAction" class="org.spring.action.UserAction" scope="prototype">
<constructor-arg ref="userServiceImpl"/>
</bean> -->
<!-- 以byName的方式完成自动注入(对类的依赖对象不能一目了然,不常用) -->
<!-- byName的工作原理:根据类中依赖对象的名称调用相应的setter方法完成注入,注入的对象是配置文件中id为依赖对象名称的对象 -->
<!-- <bean id="userServiceImpl" class="org.spring.service.impl.UserServiceImpl" autowire="byName"/> -->
</beans>
Test.java
package org.spring.test;
import org.spring.action.UserAction;
import org.spring.model.User;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
private BeanFactory factory=new ClassPathXmlApplicationContext("xml/beans.xml");
@org.junit.Test
public void test01() {
UserAction userAction1=factory.getBean("userAction", UserAction.class);
userAction1.add();
userAction1.delete();
System.out.println("*********************************************");
UserAction userAction2=factory.getBean("userAction", UserAction.class);
User user=new User(1,"悟空");
userAction2.setUser(user);
userAction2.setId(10);
userAction2.add();
userAction2.delete();
}
}