Spring基于xml的配置学习笔记

Spring的开发步骤

在这里插入图片描述
sping是通过xml配置文件替使用者记录对象
spring通过读取xml,id通过反射创建Bean对象

//创建UserDaoLmpl
package com.tong.dao.impl;

import com.tong.dao.UserDao;

public class UserDaoImpl implements UserDao {

    @Override
    public void show() {
        System.out.println("这是UserDao的show的方法" );
    }
    private String name="name1";
    public String showname() {
      return name;
    }

    @Override
    public String toString() {
        return "UserDaoImpl{" +
                "name='" + name + '\'' +
                '}';
    }

    public UserDaoImpl() {
        System.out.println("UserDao的是无参构造");
    }
}
package service.impl;


import com.tong.dao.UserDao;
import com.tong.dao.impl.UserDaoImpl;

public class UserServiceImpl implements UserService {
        @Override
        public void save() {
            userDao.show();
            System.out.println("这是UserServiceImpl的save");
        }
        private UserDao userDao;
        public UserServiceImpl(UserDao userDao) {
            System.out.println("UserServiceImpl的有参构造");
            this.userDao=userDao;
        }

    public UserServiceImpl() {
        System.out.println("UserServiceImpl的无参构造");
    }
    public void UserDaoshow(){
        System.out.println(userDao.toString());

    }

    public void setUserDao(UserDao userDao) {
        System.out.println("UserServiceImpl这是set方法");
        this.userDao = userDao;
    }
}

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:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="UserDao" class="com.tong.dao.impl.UserDaoImpl" scope="prototype">
</bean>
    <bean id="UserServiceImpl" class="service.impl.UserServiceImpl" p:userDao-ref="UserDao" scope="prototype" >
    </bean>
</beans>

xml配置里面的 scope是配置范围的
singleton 是 默认值,单例的
prototype 多例的

当scope被配置成单例的时候

import com.tong.dao.UserDao;
import com.tong.dao.impl.UserDaoImpl;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import service.impl.UserServiceImpl;

public class test {
    @Test
    public void test1(){
        ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("bean.xml");
        UserServiceImpl userService1 = (UserServiceImpl) app.getBean("UserServiceImpl");
        UserServiceImpl userService2 = (UserServiceImpl) app.getBean("UserServiceImpl");
        System.out.println(userService1);
        System.out.println(userService2);
        //userService.UserDaoshow();
    }
}

输出结果是
在这里插入图片描述
当scope被设置成prototype时
在这里插入图片描述
scope是单例的时候只有一个对象 而多例的时候可以获得多个对象

测试的结果如下在这里插入图片描述
由此可见Dao在注入到Service的时候用的是set方法


这里细说一下有参构造和无参构造

标签 <property name="" ref=""></property> 这个跟使用p空间一样
都是使用set方法来注入
这里面name是注入的属性的名字 ref是引用bin里面的id
标签   <constructor-arg name="" ref=""></constructor-arg> 
则是使用构造方法来注入
name 是在Java程序里面构造的参数的名字  ref是引用bin里面的id

构造方法注入方法如下

<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>

<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
<constructor-arg name="userDao" ref="userDao">
</constructor-arg>
</bean>

普通数据类型的注入如下

<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="company" value="传智播客"></property>
<property name="age" value="15"></property>
</bean>

集合数据类型(List)的注入如下

<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="strList">
<list>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</list>
</property>
</bean>

集合数据类型(List)的注入

<bean id="u1" class="com.itheima.domain.User"/>
<bean id="u2" class="com.itheima.domain.User"/>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="userList">
<list>
<bean class="com.itheima.domain.User"/>
<bean class="com.itheima.domain.User"/>
<ref bean="u1"/>
<ref bean="u2"/>
</list>
</property>
</bean>

集合数据类型( Map<String,User> )的注入

<bean id="u1" class="com.itheima.domain.User"/>
<bean id="u2" class="com.itheima.domain.User"/>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="userMap">
<map>
<entry key="user1" value-ref="u1"/>
<entry key="user2" value-ref="u2"/>
</map>
</property>
</bean>

集合数据类型(Properties)的注入

<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="properties">
<props>
<prop key="p1">aaa</prop>
<prop key="p2">bbb</prop>
<prop key="p3">ccc</prop>
</props>
</property>
</bean>

可以通过下面引用其他的配置文件

<import resource="applicationContext-xxx.xml"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值