Spring day01(2)
Spring day01(2)
萧小蚁 发表于2年前
Spring day01(2)
  • 发表于 2年前
  • 阅读 9
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: Spring_01_start
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">


共有 人打赏支持
萧小蚁
粉丝 93
博文 278
码字总数 192339
×
萧小蚁
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: