首先搭建spring环境,springjar非常多,初步的spring搭建需要的jar不多,配置文件中的约束以及引用空间也不复杂,只用最初是的几个就行,当遇到ioc以及aop时候还会继续添加配置文件内容以及jar,这是必然的,因为spring就是用配置文件中的bean管理,所以刚开始,我们先用最初级的简单测试,继续深入,请看我的spring专栏其他文章,当然可能还在更新中。
首先导入jar包:
这五个就够了,不用太多,当然多导入也行,只是用不到暂时。
项目结构一览:
我们来创建各个java文件,首先是po层的持久化类文件:
package com.hpe.po;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class Persion {
private int age;
private String name;
private String sex;
private String[] array;
private List<String> list;
private Map<String,Object> map;
public Persion(int age, String name, String sex) {
super();
this.age = age;
this.name = name;
this.sex = sex;
}
public Persion() {
super();
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String[] getArray() {
return array;
}
public void setArray(String[] array) {
this.array = array;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public Map<String, Object> getMap() {
return map;
}
public void setMap(Map<String, Object> map) {
this.map = map;
}
@Override
public String toString() {
return "Persion [age=" + age + ", name=" + name + ", sex=" + sex + "]";
}
public void eat(){
System.out.println("eating...");
}
}
然后是dao层,由于没有整合mybatis连接数据库,所以dao层里面没有写操作数据库的东西:
package com.hpe.dao;
public interface IUserDao {
void addUser();
}
然后userdao的实现类userdaoimpl,由于个人事务
package com.hpe.dao;
public class UserDaoImpl implements IUserDao {
@Override
public void addUser() {
System.out.println("userdao-adduser");
}
}
然后是service接口:
package com.hpe.service;
public interface IUserService {
void addUser();
}
service的实现类UserServcieImpl
package com.hpe.service;
import com.hpe.dao.IUserDao;
import com.hpe.dao.UserDaoImpl;
public class UserServiceImpl implements IUserService {
private IUserDao userDao;
public void setUserDao(IUserDao userDao){
this.userDao=userDao;
}
@Override
public void addUser() {
System.out.println("userservice-adduser");
userDao.addUser();
}
}
你可能发现,我这里用了好多接口跟接口的实习类,其实对于这么个小测试根本没必要,而且显得麻烦,其实你错了,这是一种良好的习惯,在公司也好,以后开发也好,代码以及项目结构都有书写规则,我建议读到此处但是还不清楚的人查一查,类名要大写,包名要小写,包名一般是公司域名倒置写法等等。再说接口,有了接口,我们在其他层面实现时候,都是面向接口,这样的好处是,当我们更新技术时候,实现类会有大改变,但是接口不会变,因为接口不涉及实现内容,只是描写实现功能函数名,所以以后醒目更换技术,我们只需要更换某个层接口的实习类,其他层不会改变,较低了耦合度。
然后我们在配置下日志文件,这个文件是在测试开发时候,打印日志信息,实用的jar包我们一开始已经导入了。
log4j.properties
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
然后是配置文件:
<?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"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
">
<!-- 一上述是引用的命名空间以及约束,很明显都是外网地址,所以需要联网才行,目前实用的是基本的这几个,后期还会添加,具体的需要再去加,
当然,最后我们全部学完,整合以后,beans标签中的约束空间路径会很多,以后都复制那个就行了。
-->
<!-- 装配bean -->
<!-- id,bean的唯一标识 -->
<!-- class:处理类,全类名 -->
<!-- 使用无参构造器创建实例 -->
<!-- scope指定bean的范围 singleton:默认值,单实例,即单例模式,构造方法private修饰。。什么时候创建?创建ioc容器时候创建 prototype:多实例,
request: session -->
<bean id="persion1" class="com.hpe.po.Persion" scope="singleton"></bean>
<bean id="persion2" class="com.hpe.po.Persion" scope="singleton"></bean>
<!-- 使用有参构造器,注入属性值
class="com.hpe.po.Persion"是要管理的类,id为自己起的名字,便于识别以及引用该标签
constructor-arg:设置构造方法的参数值,name为参数名,value为参数值
由于我们没有连接数据库,所以这里的配置相当于存储在数据库的数据,连接数据库以后,就不会再这么配置
-->
<bean id="persion3" class="com.hpe.po.Persion">
<constructor-arg name="age" value="1"></constructor-arg>
<constructor-arg name="name" value="zhangsan"></constructor-arg>
<constructor-arg name="sex" value="男"></constructor-arg>
</bean>
<!-- 使用set方式注入属性 前提:要有对应的set方法 -->
<bean id="persion4" class="com.hpe.po.Persion">
<property name="age" value="18"></property>
<property name="sex" value="女"></property>
<property name="name" value="ranbow"></property>
</bean>
<!-- 使用p名称空间的方式设置属性值 -->
<!-- 调用的对应的set方法赋值 -->
<bean id="persion5" class="com.hpe.po.Persion" p:age="18" p:sex="女"
p:name="bai"></bean>
<bean id="userDao" class="com.hpe.dao.UserDaoImpl"></bean>
<!--注入应用类型 -->
<bean id="userService" class="com.hpe.service.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>
<bean id="userService1" class="com.hpe.service.UserServiceImpl"
p:userDao-ref="userDao">
</bean>
<!-- 需要注入明明功能空间 -->
<util:list id="list">
<value>星期一</value>
<value>星期二</value>
<value>星期三</value>
</util:list>
<!-- 注入复杂类型 -->
<bean id="persion6" class="com.hpe.po.Persion" p:list-ref="list">
<property name="age" value="18"></property>
<property name="name" value="xiaobai"></property>
<property name="sex" value="男"></property>
<property name="array">
<!-- 虽然是数组,但是还是按集合来 -->
<list>
<value>你好</value>
<value>你好不好</value>
<value>好吗?</value>
</list>
</property>
<!-- 对应map结构的注入 -->
<property name="map">
<map>
<entry key="aaa" value="AAA"></entry>
<entry key="aa3a" value="AA3A"></entry>
<entry key="aa4a" value="AA2A"></entry>
</map>
</property>
<!-- <property name="list" ref="list">
</property> -->
</bean>
</beans>
最后我们创建个测试类,来用junit单元测试,测试执行:
package com.hpe.test;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.hpe.po.Persion;
import com.hpe.service.IUserService;
import com.hpe.service.UserServiceImpl;
public class SpringTest {
@Test
public void method3(){
//加载配置文件,文件路径是在src目录下,所以直接写,如果是在某个包下应该写成com/pacake/applicationContext.xml(样例,就是包名为路径前缀,但是“.”要改成斜线)
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
//Persion p=(Persion)context.getBean("persion1");
//通过配置文件中国bean的id为persion1的bean来获取,然后根据class等于的处理类,书写第二个参数,用来反射
Persion persion1 = context.getBean("persion1", Persion.class);
persion1.eat();
Persion persion2 = context.getBean("persion1", Persion.class);
persion2.eat();
}
@Test
public void method5(){
//加载配置文件
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
//Persion p=(Persion)context.getBean("persion1");
Persion persion = context.getBean("persion3", Persion.class);
System.out.println(persion);
}
@Test
public void method6(){
//加载配置文件
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
//Persion p=(Persion)context.getBean("persion1");
Persion persion = context.getBean("persion4", Persion.class);
System.out.println(persion);
}
@Test
public void method10()
{
//加载配置文件,初始化ioc容器(创建对应实例)
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//从ioc容器中获取bean
IUserService userService = context.getBean("userService", IUserService.class);
//通过getBean,读取userService id的IUserServiceImpl的实现类(在bean标签中,class设置为UserServiceImpl。所以获得该实现类)
//然后bean设置属性,《propert》标签,设置userServiceimpl中的属性字段userdao为userDaoImpl实现类的实体。
userService.addUser();
}
@Test
public void method7(){
//加载配置文件
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
//Persion p=(Persion)context.getBean("persion1");
Persion persion = context.getBean("persion5", Persion.class);
System.out.println(persion);
}
@Test
public void method8(){
//加载配置文件
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
//Persion p=(Persion)context.getBean("persion1");
Persion persion = context.getBean("persion6", Persion.class);
System.out.println(persion);
String[] array=persion.getArray();
for(String a:array){
System.out.println(a);
}
Map<String,Object> map=persion.getMap();
Set<String> keySet=map.keySet();//所有的建组成的集合
//遍历建的集合,--》得到所有的建--》得到对饮的建
for(String key:keySet){
System.out.println(key+"-->"+map.get(key));
}
List<String> list=persion.getList();
for(String s:list){
System.out.println(s);
}
}
}