javaEE学习 ----- spring环境搭建及基础应用
Posted 壹叁零壹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaEE学习 ----- spring环境搭建及基础应用相关的知识,希望对你有一定的参考价值。
一、基础环境搭建
1,导包
当前只是spring初始阶段,只使用spring最核心的包及相关支持。spring关系如图所示:
最终,导入项目的包结构如图所示:
2,创建对象
public class Worker
// 姓名
private String name;
// 薪水
private Integer salary;
public void setName(String name)
this.name = name;
public void setSalary(Integer salary)
this.salary = salary;
@Override
public String toString()
return "Worker [name=" + name + ", salary=" + salary + "]";
3,书写配置注册对象到容器
创建xml文件注册对象到容器,原则上命名和路径没有指定,推荐在src目录下创建applicationContext.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
<bean name="worker" class="com.future.domain.Worker"></bean>
</beans>
4,代码测试
创建测试类,并书写测试代码:
public class TestDemo
/*
* 整体流程
* 1,导包
* 2,构建bean类
* 3,将bean与spring关联【配置】
* 4,获取bean对象并使用
*/
@Test
public void test()
// 创建容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext(
"applicationContext.xml");
//从spring中获取对象
Worker worker = (Worker) ac.getBean("worker");
//使用对象
System.out.print("worker:"+worker);
//引出:构造方法的调用,属性初始化
展示结果如图所示,表示存储对象及对象调用成功。
二、创建对象的方式
1,通过空参构造方法创建对象
如上面简单实例,已经使用空参构造方法创建对象。为使bean类更趋于完善,添加初始化及销毁方法。
// 添加初始化/销毁方法
public void init()
System.out.println("初始化方法!");
public void destory()
System.out.println("销毁方法!");
<bean name="worker1" class="com.future.domain.Worker" init-method="init"
destroy-method="destory">
</bean>
2,静态工厂方法
(1)工厂类的实现
public class WorkerFactory
// 静态工厂
public static Worker createWorker1()
System.out.println("静态工厂创建Worker");
return new Worker();
// 实例工厂
public Worker createWorker2()
System.out.println("实例工厂创建Worker");
return new Worker();
(2)配置文件的修改
<!-- 2:静态工厂方法 -->
<bean name="worker2" class="com.future.create.WorkerFactory"
factory-method="createWorker1">
</bean>
如2所展示,实例工厂方法实现如上,当前修改配置文件实现即可。
<!-- 3:实例工厂方法 -->
<bean name="worker3"
factory-bean="WorkerFactory"
factory-method="createWorker2">
</bean>
<bean name="WorkerFactory"
class="com.future.create.WorkerFactory">
</bean>
三、属性注入
为以下功能的完善实现,为基础bean类添加bean属性对象。并完善对应构造方法,包含空参,部分参数,部分参数调整位置,全参数构造方法。最后调整实现bean类如下:
public class Worker
// 姓名
private String name;
// 薪水
private Integer salary;
// 添加对象型成员变量
private House house;
public void setName(String name)
this.name = name;
public void setSalary(Integer salary)
this.salary = salary;
// 添加构造函数
public Worker()
System.out.println("Worker空参构造方法");
// 添加初始化/销毁方法
public void init()
System.out.println("初始化方法!");
public void destory()
System.out.println("销毁方法!");
// 对象型成员变量
public House getHouse()
return house;
public void setHouse(House house)
this.house = house;
@Override
public String toString()
return "Worker [name=" + name + ", salary=" + salary + ", house="
+ house + "]";
// 创建带参构造方法
public Worker(String name, Integer salary)
System.out.println("带参顺序构造方法");
this.name = name;
this.salary = salary;
public Worker(Integer salary,String name)
System.out.println("带参混乱顺序构造方法");
this.name = name;
this.salary = salary;
public Worker(Integer salary,String name,House house)
System.out.println("全参构造方法");
this.name = name;
this.salary = salary;
this.house = house;
其中,bean类属性的类对象实现如下:
public class House
//地标
private String place;
//地段
private String location;
public String getPlace()
return place;
public void setPlace(String place)
this.place = place;
public String getLocation()
return location;
public void setLocation(String location)
this.location = location;
@Override
public String toString()
return "House [place=" + place + ", location=" + location + "]";
<!-- set方法注入 -->
<bean name="worker1" class="com.future.domain.Worker">
<property name="name" value="zhangsan"></property>
<property name="salary" value="16000"></property>
<!-- 对象型属性,引用配置好对象 -->
<property name="house" ref="house"></property>
</bean>
<bean name="house" class="com.future.domain.House">
<property name="place" value="上地华联"></property>
<property name="location" value="上地创业大厦"></property>
</bean>
2,通过构造方法注入
<!-- 构造函数注入 -->
<bean name="worker2" class="com.future.domain.Worker">
<!-- name属性: 构造函数的参数名 -->
<!-- index属性: 构造函数的参数索引 -->
<!-- type属性: 构造函数的参数类型 -->
<constructor-arg name="name" index="1" type="java.lang.String"
value="lisi"></constructor-arg>
<constructor-arg name="salary" index="0"
type="java.lang.Integer" value="999"></constructor-arg>
<constructor-arg name="house" ref="house" index="2"></constructor-arg>
</bean>
引入p空间:
xmlns:p="http://www.springframework.org/schema/p"
<!-- p名称空间注入, 走set方法
1.导入P名称空间 xmlns:p="http://www.springframework.org/schema/p"
2.使用p:属性完成注入 |-值类型: p:属性名="值" |-对象类型: p:属性名-ref="bean名称" -->
<bean name="worker3" class="com.future.domain.Worker" p:name="jack"
p:salary="20000" p:house-ref="house">
</bean>
<!-- spel注入: spring Expression Language sping表达式语言 -->
<bean name="worker4" class="com.future.domain.Worker">
<property name="name" value="#worker2.name"></property>
<property name="salary" value="#worker3.salary"></property>
<property name="house" ref="house"></property>
</bean>
(1)复杂数据的bean对象实现
//复杂数据类型注入
public class CollectionBean
//数组
private String[] arr;
//集合
private List list;
//key-value
private Map map;
//属性
private Properties prop;
public String[] getArr()
return arr;
public void setArr(String[] arr)
this.arr = arr;
public List getList()
return list;
public void setList(List list)
this.list = list;
public Map getMap()
return map;
public void setMap(Map map)
this.map = map;
public Properties getProp()
return prop;
public void setProp(Properties prop)
this.prop = prop;
@Override
public String toString()
return "CollectionBean [arr=" + Arrays.toString(arr) + ", list=" + list
+ ", map=" + map + ", prop=" + prop + "]";
(2)数据注入实现
<bean name="collectionBean" class="com.future.domain.CollectionBean">
<!-- 数组 -->
<property name="arr">
<array>
<value>hello</value>
<value>world</value>
<value>javaEE</value>
</array>
</property>
<!-- list 集合 -->
<property name="list">
<list>
<value>画画</value>
<value>唱歌</value>
<value>写字</value>
<value>冥想</value>
</list>
</property>
<!-- key-value -->
<property name="map">
<map>
<entry key="脸为什么黄了" value="防冷涂的蜡"></entry>
<entry key="天王盖地虎" value="宝塔镇河妖"></entry>
</map>
</property>
<!-- 属性值 -->
<property name="prop">
<props>
<prop key="用户名">root</prop>
<prop key="密码">123456</prop>
<prop key="验证码">天上掉下个林妹妹</prop>
</props>
</property>
</bean>
整体数据注入测试类实现:
//测试注入属性
public class TestInjection
// set方法注入
@Test
public void test1()
ApplicationContext ac = new ClassPathXmlApplicationContext(
"/com/future/injection/applicationContext.xml");
Worker worker1 = (Worker) ac.getBean("worker1");
System.out.println("worker1:" + worker1);
// 构造方法注入
@Test
public void test2()
ApplicationContext ac = new ClassPathXmlApplicationContext(
"/com/future/injection/applicationContext.xml");
Worker worker2 = (Worker) ac.getBean("worker2");
System.out.println("worker2:" + worker2);
// p名称空间注入
@Test
public void test3()
ApplicationContext ac = new ClassPathXmlApplicationContext(
"/com/future/injection/applicationContext.xml");
Worker worker3 = (Worker) ac.getBean("worker3");
System.out.println("worker3:" + worker3);
// spel注入
@Test
public void test4()
ApplicationContext ac = new ClassPathXmlApplicationContext(
"/com/future/injection/applicationContext.xml");
Worker worker4 = (Worker) ac.getBean("worker4");
System.out.println("worker4:" + worker4);
// 复杂数据注入
@Test
public void test5()
ApplicationContext ac = new ClassPathXmlApplicationContext(
"/com/future/injection/applicationContext.xml");
CollectionBean collectionBean = (CollectionBean) ac
.getBean("collectionBean");
System.out.println("collectionBean:" + collectionBean);
其中部分测试结果:
爱在左,情在右,走在生命的两旁。随时撒种,随时开花,将这一路长径点缀得花香弥漫,使穿枝拂叶的行人,踏着荆棘,不觉得痛苦,有泪可落,却不是凄凉。
以上是关于javaEE学习 ----- spring环境搭建及基础应用的主要内容,如果未能解决你的问题,请参考以下文章
JAVAEE——BOS物流项目01:学习计划搭建环境主页设计(jQuery EasyUI)
Linux 学习笔记Linux 搭建 JavaEE 环境(包括 JDKIDEAMySQLtomcat)