您的位置:首页 > 编程语言 > Java开发

Spring的依赖注入(基于XML)

2015-09-18 22:50 387 查看

项目结构图



代码

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 getUs
4000
er() {
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();
}
}


结果图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring ioc