现在的位置: 首页 > 综合 > 正文

初识Sprig

2017年12月20日 ⁄ 综合 ⁄ 共 4081字 ⁄ 字号 评论关闭

Spring是一个轻量级额的控制反转和面向切面的容器框架。

Spring的特点:1、轻量(非入侵式)2、控制反转(Inversion of Control)3、面向切面(AOP)4、容器5、框架

核心机制:依赖注入

通常由调用者来创建被调用者的实例(比如说武士使用剑,武士就依赖于剑),在Spring里,创建被调用者由Spring容器来完成(因此称为控制反转),然后注入调用者(因此称为依赖注入)。

注入的方式有两种:设值注入(采用setter方法) 和 构造注入

设值注入有 1、8中基本属性 和 String 2、数组 3、集合 

下面是一个例子

package com.test;

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

public class User {

	//基本数据类型
	private String name;
	//引用类型
	private Bow bow;
	
	//集合
	private Address [] addr;
	private List list;
	private Set set;
	private Map map;

	public String getName() {
		return name;
	}

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

	public Bow getBow() {
		return bow;
	}

	public void setBow(Bow bow) {
		this.bow = bow;
	}

	public Address[] getAddr() {
		return addr;
	}

	public void setAddr(Address[] addr) {
		this.addr = addr;
	}

	public List getList() {
		return list;
	}

	public void setList(List list) {
		this.list = list;
	}

	public Set getSet() {
		return set;
	}

	public void setSet(Set set) {
		this.set = set;
	}

	public Map getMap() {
		return map;
	}

	public void setMap(Map map) {
		this.map = map;
	}

}

必须提供setter 和getter 方法

package com.test;

public class Bow {

	//user 可以使用武器
	private String name;

	public String getName() {
		return name;
	}

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

 

package com.test;

public class Address {

	//user的地址
	private String street;

	public String getStreet() {
		return street;
	}

	public void setStreet(String street) {
		this.street = street;
	}
}

 

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

	<bean id="user" class="com.test.User">
		<!-- 基本类型 -->
		<property name="name" value="cl"/>
		<!-- 引用 -->
		<property name="bow" ref="bow" />
		<!-- 集合 数组 -->	
		<property name="addr">
			<list>
				<ref bean="addr1"/>
				<ref bean="addr2"/>
				<ref bean="addr3"/>
			</list>
		</property>
		
		<!-- 集合 list -->
		<property name="list">
			<list>
				<ref bean="addr1"/>
				<ref bean="addr2"/>
				<ref bean="addr3"/>
				<value type="java.lang.Integer">11</value>
				<value type="java.lang.Integer">11</value>
			</list>
		</property>
		<!-- 集合 set -->
		<property name="set">
			<set>
				<ref bean="addr1"/>
				<ref bean="addr2"/>
				<ref bean="addr3"/>
				<value type="java.lang.Integer">11</value>
				<value type="java.lang.Integer">12</value>
			</set>
		</property>
		
		<!-- 集合 map -->
		<property name="map">
			<map>
				<entry key="1" value="1" />
				<entry key="2" value="2" />
				<entry key="3" value="3" />
				<entry key="4" value-ref="addr1"/>
			</map>
		</property>
	</bean>
	
	<!-- 引用 -->
	<bean id="bow" class="com.test.Bow">
		<property name="name" value="弓箭" />
	</bean>
	
	<!-- 数组 -->
	<bean id="addr1" class="com.test.Address">
		<property name="street" value="中山路" />
	</bean>
	<bean id="addr2" class="com.test.Address">
		<property name="street" value="南昌路" />
	</bean>
	<bean id="addr3" class="com.test.Address">
		<property name="street" value="瑞京路" />
	</bean>
</beans>

 

package com.test;


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

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

/**
 * 测试类
 * */
public class Test {

	public static void main(String[] args) {
		
		//使用Spring的Ioc
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		//ApplicationContext context = new FileSystemXmlApplicationContext("src/applicationContext.xml");
		
		User hello = (User)context.getBean("user");
		
		//hello.setStr("this is Helloword!!--");
		
		System.out.println(hello.getBow().getName());
		
		//取数组
		System.out.println("******取数组******");
		Address addr[] = hello.getAddr();
		for(int i=0;i<addr.length;i++)
		System.out.println(addr[i].getStreet());
		
		//取list
		System.out.println("******取list******");
		List list = hello.getList();
		for(Object out:list){
			if(out.getClass()==Integer.class)
				System.out.println(out);
			else
				System.out.println(((Address)out).getStreet());
		}
		
		//取set
		System.out.println("******取set******");
		Set set = hello.getSet();
		for(Object out:set){
			if(out.getClass()==Integer.class)
				System.out.println(out);
			else
				System.out.println(((Address)out).getStreet());
		}
		
		//取map
		System.out.println("******取map******");
		Map<String,Object> map = hello.getMap();
		for(String out:map.keySet()){
			if(map.get(out).getClass()==String.class)
				System.out.println(out + "=" + map.get(out));
			else
				System.out.println(((Address)map.get(out)).getStreet());
		}
	}
}

 

抱歉!评论已关闭.