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"/>