文档章节

Spring day01(2)

萧小蚁
 萧小蚁
发布于 2015/06/15 18:41
字数 1577
阅读 10
收藏 0
点赞 0
评论 0
package model;

public class User {

	private int id;
	private String name;
	
	public User(int id,String name){
		this.id=id;
		this.name=name;
	}
	
	public User(){
		
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + "]";
	}
	
	public void init(){
		System.out.println("----->初始化");
	}
	public void destory(){
		System.out.println("----->销毁");
	}
}

package model;

import java.util.List;
import java.util.Map;
import java.util.Set;

public class User02 {

	private List<String> list;
	private Set<String> set;
	private Map<String,String> map;
	
	public List<String> getList() {
		return list;
	}
	public void setList(List<String> list) {
		this.list = list;
	}
	public Set<String> getSet() {
		return set;
	}
	public void setSet(Set<String> set) {
		this.set = set;
	}
	public Map<String, String> getMap() {
		return map;
	}
	public void setMap(Map<String, String> map) {
		this.map = map;
	}
	@Override
	public String toString() {
		return "User02 [list=" + list + ", set=" + set + ", map=" + map + "]";
	}
	
}

package model;

public class Parent {

	private int id;
	private String name;
	
	public Parent(){
		
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Parent [id=" + id + ", name=" + name + "]";
	}
	
	
}

package model;

public class Child extends Parent{

	private String address;
	public Child(){
		
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	@Override
	public String toString() {
		return "Child [address=" + address +",name"+super.getName()+ "]";
	}
	
}

<?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:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" 
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">

	<bean id="user01" class="model.User" scope="singleton">
		<!-- 通过构造方法注入依赖信息 -->
		<constructor-arg name="id" value="1001"></constructor-arg>
		<constructor-arg name="name" value="zhangsan"></constructor-arg>
	</bean>
	
	<bean id="user0101" class="model.User" scope="prototype">
		<!-- 通过构造方法注入依赖信息 -->
		<constructor-arg name="id" value="1001"></constructor-arg>
		<constructor-arg name="name" value="zhangsan"></constructor-arg>
	</bean>
	
	<bean id="user0102" class="model.User" init-method="init">
		<!-- 通过构造方法注入依赖信息 -->
		<constructor-arg name="id" value="1001"></constructor-arg>
		<constructor-arg name="name" value="zhangsan"></constructor-arg>
	</bean>
	
	<bean id="user02" class="model.User">
		<!-- 通过set方法注入依赖信息 -->
		<property name="id" value="1002"></property>
		<property name="name" value="lisi"></property>
	</bean>
	
	<bean id="user03" class="model.User02">
		<property name="list">
			<list>
				<value>tianqi</value>
				<value>liuliu</value>
			</list>
		</property>
		
		<property name="set">
			<set>
				<value>wangwu</value>
				<value>zhaoliu</value>
			</set>
		</property>
		
		<property name="map">
			<map>
				<entry>
					<key><value>a</value></key>
					<value>apple</value>
				</entry>
			</map>
		</property>
		
	</bean>
	
	<bean id="parent" class="model.Parent">
		<property name="id" value="1001"></property>
		<property name="name" value="zhangsan"></property>
	</bean>
	
	<bean id="child" class="model.Child" parent="parent">
		<property name="address" value="beijing"></property>
	</bean>
	
	
</beans>

package test;

import model.Child;
import model.Parent;
import model.User;
import model.User02;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class TestUserService {

	@Test
	public void testUser01(){
		ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
		User user=context.getBean("user01", User.class);
		System.out.println(user);
	}
	
	@Test
	public void testUser02(){
		ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
		User user=context.getBean("user02", User.class);
		System.out.println(user);	
	} 
	
	@Test
	public void testUser03(){
		ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
		User02 user=context.getBean("user03", User02.class);
		System.out.println(user);
	}
	
	@Test
	public void testUser04(){
		ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
		User user=context.getBean("user01", User.class);
		System.out.println("------>"+user.hashCode());
		
		User user2=context.getBean("user01", User.class);
		System.out.println(user2.hashCode());
	}
	
	@Test
	public void testUser05(){
		ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
		User user=context.getBean("user0101", User.class);
		System.out.println("------>"+user.hashCode());
		
		User user2=context.getBean("user0101", User.class);
		System.out.println(user2.hashCode());
	}
	
	@Test
	public void testUser06(){
		ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
		User user=context.getBean("user0102", User.class);
		System.out.println("------>"+user.hashCode());
		
		User user2=context.getBean("user0102", User.class);
		System.out.println(user2.hashCode());
	}
	
	@Test
	public void testUser07(){
		ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
		Child c=context.getBean("child", Child.class);
		System.out.println(c);
	}
	
	
}

二、Spring应用的环境搭建

1. 添加spring框架的包到classpath:

2. 添加spring的配置文件到classpath: 

<?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:context="http://www.springframework.org/schema/context"

    xmlns:aop="http://www.springframework.org/schema/aop"

    xmlns:tx="http://www.springframework.org/schema/tx"

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">

  ...

</beans>

3. 给Eclipse添加xsd的支持:

windows-->preferences->myeclipse-->files and editors--> xml-->xmlcatalog

点击“add”,在location中选“File system”,然后在Spring解压目录的dist/resources目录中选择spring-beans-3.1.xsd,把key type改为Schema location,key改为http://www.springframework.org/schema/beans/spring-beans-3.1.xsd

  



三、Spring应用的开发步骤

1. 在spring的配置文件中注册要由Spring IoC容器管理的Bean:不仅管理Bean的生命周期,还管理Bean之间的依赖关系。

2. bean的配置:

<bean id="bean的唯一标识名" class="Bean类的全限定名"/>

3. bean的依赖关系配置:(后面有详细介绍)

4. 从spring容器中获取指定的Bean:

//创建出spring的应用上下文实例

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

//获取指定的Bean实例

Object obj = context.getBean("标识名", 类型信息对象);


四、Spring中的两种容器

1. BeanFactory:Bean工厂(最简单的容器)。创建和分发Bean对象,创建协作对象间的关系,参与管理Bean的生命周期。

   常用实现类:XmlBeanFactory

2. ApplicationContext:Spring应用上下文。

建立在BeanFactory基础之上,还提供了文本信息解析工具(对国际化的支持),载入文件资源的通用方法,还可以向注册为监听器的Bean发送事件。

★1) ClassPathXmlApplicationContext – 从类路径中的XML文件载入上下文定义信息。

 2) FileSystemXmlApplicationContext – 从指定的文件系统路径中的XML文件载入上下文定义信息。

 3) XmlWebApplicationContext  – 从web系统中的XML文件中载入上下文定义信息。

3. 从ApplicationContext中获取Bean实例的方法:

 1) Xxx xxx = context.getBean("标识名或别名", 类型信息对象);

 2) Xxx xxx = (Xxx)context.getBean("标识名或别名");

 3) 要求Bean的标识名与类名相同:UserService userService = context.getBean(UserService.class);

 

 五、Bean的装配:

 1. 基本形式:(spring3以下版本id属性值不能出现特殊字符),name用于取别名。

 <bean id="唯一标识名" class="类的全限定名"/>

 2. 注入依赖的常用方式

  1) 构造器注入:<constructor-arg index="参数的位置索引值" [value="注入值" | ref="注入引用"] />

 ★2) setter注入:建议使用。必须要有无参的构造方法,必须为需要注入的属性提供setter方法。

     <property name="属性名" value="注入值"/>

<property name="属性名" ref="注入引用"/>


 ★3. 指定Bean的生存范围:默认情况,Spring容器中管理的是Bean实例是单例的。

  1) scope="singleton":默认值

  2) scope="prototype":从Spring容器中获取一次就创建一个实例

  3) request:在HTTP请求范围内。只有在使用具有Web能力的Spring容器时才有效

  4) session:HTTP Session范围。同上。

  

 4. 指定Bean的初始化和销毁方法: 通过init-method,destroy-method属性来指定对应的方法。

 

★5. 装配Bean的继承: 通过parent属性来完成。还可能通过abstract="true"来指定为抽象的。

 

 6. 小心使用自动装配:通过auto-wire属性来完成:可选值:byName, byType, autodetect, default

 

 7. 自动装配也可以配置在spring配置文件的根元素上:<beans ... default-autowire="byName">

          可以配置spring对Bean的初始化进行延迟:<beans ... default-lazy-init="true">


© 著作权归作者所有

共有 人打赏支持
萧小蚁

萧小蚁

粉丝 96
博文 278
码字总数 192339
作品 0
海淀
程序员
springmvc搭建-搭建笔记

1、环境搭建 创建springmvc-day01这么一个web应用; 导入springioc,springweb , springmvc相关的jar包 http://down.51cto.com/data/2445976 jar下载 2、jar包准备 3、web.xml配置 4、Dispatc...

知止内明 ⋅ 04/21 ⋅ 0

MyBatis系列目录--7. Mybatis与Spring最佳整合

转载请注明出处哈:http://carlosfu.iteye.com/blog/2238662 1. 整合思路 (1) SqlSessionFactory由Spring作为单例管理 (2) spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSe...

付磊-起扬 ⋅ 2015/09/03 ⋅ 0

spring-boot-admin 2.0小试牛刀

序 本文主要展示下spring-boot-admin 2.0版本的新特性 server实例 maven 配置 config client实例 maven 配置 这里配置admin server的地址 运行实例 wallboard wallboard 实例详情 applicatio...

go4it ⋅ 05/21 ⋅ 0

Spring 课程笔记day01

课程体系 1、Spring的IOC(控制反转)和DI(依赖注入) 2、SpringDI的高级(注解形式) 3、Spring的AOP(面向切面编程) 4、Spring和JDBC的整合 5、Spring的声明式的事物处理 2. Spring简介 Spri...

architect刘源源 ⋅ 01/14 ⋅ 0

Spring Boot开启的 2 种方式

Spring Boot依赖 使用Spring Boot很简单,先添加基础依赖包,有以下两种方式 1. 继承spring-boot-starter-parent项目 2. 导入spring-boot-dependencies项目依赖 Spring Boot依赖注意点 1. 属...

Java技术栈 ⋅ 06/10 ⋅ 0

Spring 课程笔记day01

Spring 课程笔记day01 1. 课程体系 1、Spring的IOC(控制反转)和DI(依赖注入) 2、SpringDI的高级(注解形式) 3、Spring的AOP(面向切面编程) 4、Spring和JDBC的整合 5、Spring的声明式的事物...

architect刘源源 ⋅ 01/14 ⋅ 0

Spring Boot Starters启动器

Starters是什么? Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。如你想使用Spring JPA访问数...

Java技术栈 ⋅ 06/10 ⋅ 0

SpringMVC,mybatis,spring整合

需求:使用SpringMVC和mybatis完成商品列表查询 一 整合思路 1 相关jar包(maven) 2 整合dao层 mybatis和springmvc整合,通过spring管理mapper接口 使用mapper的扫描器自动扫描mapper接口在...

Bbigbug ⋅ 04/25 ⋅ 0

spring boot简单实现rest服务

问题 最开始我是想使用Spring MVC搭建一个简单的REST服务,去官网看了看教程,现在Spring胆越来越大了,需要我集成一个maven的父项目,我并不愿意继承Spring的父项目。然后,就开始下面的探索...

亚林瓜子 ⋅ 06/12 ⋅ 0

Spring Cloud Task 2.0.0 发布,升级了所有的依赖关系

Spring Cloud Task 2.0.0.RELEASE 现已正式发布,可从 GitHub 和 Pivotal 仓库下载使用。下面看看该版本有哪些更新内容。 官方表示 Spring Cloud Task 2.0.0.RELEASE 旨在与 Spring Boot 2 ...

局长 ⋅ 05/08 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

DevOps 资讯 | PostgreSQL 的时代到来了吗 ?

PostgreSQL是对象-关系型数据库,BSD 许可证。拼读为"post-gress-Q-L"。 作者: Tony Baer 原文: Has the time finally come for PostgreSQL?(有删节) 近30年来 PostgreSQL 无疑是您从未听...

RiboseYim ⋅ 6分钟前 ⋅ 0

Cube、Cuboid 和 Cube Segment

1.Cube (或Data Cube),即数据立方体,是一种常用于数据分析与索引的技术;它可以对原始数据建立多维度索引。通过 Cube 对数据进行分析,可以大大加快数据的查询效率 2.Cuboid 在 Kylin 中特...

无精疯 ⋅ 44分钟前 ⋅ 0

github太慢

1:用浏览器访问 IPAddress.com or http://tool.chinaz.com 使用 IP Lookup 工具获得github.com和github.global.ssl.fastly.net域名的ip地址 2:/etc/hosts文件中添加如下格式(IP最好自己查一...

whoisliang ⋅ 46分钟前 ⋅ 0

非阻塞同步之 CAS

为解决线程安全问题,互斥同步相当于以时间换空间。多线程情况下,只有一个线程可以访问同步代码。这种同步也叫阻塞同步(Blocking Synchronization). 这种同步属于一种悲观并发策略。认为只...

长安一梦 ⋅ 57分钟前 ⋅ 0

云计算的选择悖论如何对待?

人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云计算为...

linux-tao ⋅ 59分钟前 ⋅ 0

Redis 注册为 Windows 服务

Redis 注册为 Windows 服务 redis 注册为 windows 服务相关命令 注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 启动服务 re......

Os_yxguang ⋅ 今天 ⋅ 0

世界那么大,语言那么多,为什么选择Micropython,它的优势在哪?

最近国内MicroPython风靡程序界,是什么原因导致它这么火呢?是因为他功能强大,遵循Mit协议开源么? 错!因为使用它真的是太舒服了!!! Micropython的由来,这得益于Damien George这位伟大...

bodasisiter ⋅ 今天 ⋅ 0

docker 清理总结

杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有已经停止的容器(docker rm没有加-f参数,运行中的容器不会删掉) docker rm $(docker ps -a -q) 删除所有未打 dangling 标...

vvx1024 ⋅ 今天 ⋅ 0

关于学习

以前学车的时候,教练说了这样的一句话:如果一个人坐在车上一直学,一直学,反而不如大家轮流着学。因为一个人一直学,就没有给自己留空间来反思和改进。而轮流着学的时候大家下来之后思考上...

mskk ⋅ 今天 ⋅ 0

压缩工具之gzip-bzip2-xz

win下常见压缩工具:rar zip 7z linux下常见压缩工具:zip gz bz2 xz tar.gz tar.bz2 tar.xz gzip 不支持目录压缩 gzip 1.txt #压缩。执行后1.txt消失,生成1.txt.gz压缩文件 gzip -d 1.txt....

ZHENG-JY ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部