Spring的依赖注入(基于XML)

项目结构图

这里写图片描述

代码

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();
    }
}

结果图

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值