Spring初体验

    首先搭建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);
		}
	}
	
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值