Spring是一个开源的控制反转(Inversion of Control ,IoC)和面向切面(AOP)的容器框架.它的主要目得是简化企业开发,提高开发效率 Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式 IoC(Inversion of Control,控制反转)。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转 DI—Dependency Injection,即“依赖注入”:是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。 注入方式:构造器注入和属性注入,详细见代码演示部分 Spring环境搭建:首先下载spring-framework-3.2.6.RELEASE-dist.zip,按需导入jar包(初学阶段最好不要一次全导入,而是根据异常提示,逐步导入),演示注入方式,只需导入如下基本包(如下图),其中commons-loggin-1.2.jar 是Apache官网提供的。 Beans.xml
<?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-3.2.xsd" >
<import resource ="Beans2.xml" />
<bean id ="userid1" class ="com.entity.User" name ="username1" scope ="singleton" > </bean >
<bean id ="userid2" class ="com.entity.User" name ="username2" scope ="prototype" > </bean >
<bean id ="user1" class ="com.entity.User" >
<constructor-arg name ="num" value ="XH1003060101" > </constructor-arg >
</bean >
<bean id ="user2" class ="com.entity.User" >
<constructor-arg >
<value > 1001</value >
</constructor-arg >
<constructor-arg >
<value > 张三</value >
</constructor-arg >
<constructor-arg >
<value > 18</value >
</constructor-arg >
<constructor-arg >
<value > XH1003060117</value >
</constructor-arg >
</bean >
<bean id ="user2_2" class ="com.entity.User" >
<constructor-arg index ="0" value ="1001" > </constructor-arg >
<constructor-arg index ="1" value ="张三" > </constructor-arg >
<constructor-arg index ="2" value ="18" > </constructor-arg >
<constructor-arg index ="3" value ="XH1003060117" > </constructor-arg >
</bean >
<bean id ="user3" class ="com.entity.User" >
<property name ="id" value ="1002" > </property >
<property name ="name" value ="李四" > </property >
<property name ="age" value ="18" > </property >
<property name ="num" value ="XH1003060118" > </property >
</bean >
<bean id ="people1" class ="com.entity.People" >
<property name ="u" ref ="user3" > </property >
</bean >
<bean id ="people2" class ="com.entity.People" >
<constructor-arg >
<value > 王五</value >
</constructor-arg >
<constructor-arg >
<ref bean ="user3" />
</constructor-arg >
</bean >
<bean id ="people3" class ="com.entity.People" >
<constructor-arg name ="u" ref ="user3" > </constructor-arg >
</bean >
<bean id ="people4" class ="com.entity.People" >
<property name ="uArray" >
<array >
<ref bean ="user1" />
<ref bean ="user2" />
<ref bean ="user3" />
</array >
</property >
</bean >
<bean id ="people5" class ="com.entity.People" >
<property name ="uList" >
<list >
<ref bean ="user1" />
<ref bean ="user3" />
<bean class ="com.entity.User" >
<property name ="name" value ="李木子" > </property >
</bean >
</list >
</property >
</bean >
<bean id ="people6" class ="com.entity.People" >
<property name ="map" >
<map >
<entry key ="a" value-ref ="user3" > </entry >
<entry key ="b" >
<ref bean ="user3" />
</entry >
<entry key ="c" >
<bean class ="com.entity.User" >
<property name ="name" value ="何炅" > </property >
</bean >
</entry >
</map >
</property >
</bean >
<bean id ="people7" class ="com.entity.People" >
<property name ="pro" >
<props >
<prop key ="k1" > v1</prop >
<prop key ="k2" > v2</prop >
<prop key ="k3" > v3</prop >
</props >
</property >
</bean >
<bean id ="people8" class ="com.entity.People" >
<property name ="u" ref ="userOut" > </property >
</bean >
</beans >
<?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-3.2.xsd" >
<bean id ="userOut" class ="com.entity.User" >
<property name ="name" value ="外部引入" > </property >
</bean >
</beans >
package com .test
import java.util .Iterator
import java.util .List
import java.util .Map
import java.util .Properties
import java.util .Set
import org.springframework .context .ApplicationContext
import org.springframework .context .support .ClassPathXmlApplicationContext
import com .entity .People
import com .entity .User
public class Demo1 {
public static void main(String[] args) {
ApplicationContext app = new ClassPathXmlApplicationContext("Beans.xml" )
//测试jar包导入是否正确
//System.out .println (app)
//默认是单例的,scope="singleton"
//两种获取bean的方式,id,name
//通过id获取
User user1 = (User) app.getBean ("userid1" )
//通过name获取
User user2 = (User) app.getBean ("username1" )
System.out .println (user1)
System.out .println (user2)
//多例 scope默认是sigleton单例的,设置成 prototype则为多例
User user3 = (User) app.getBean ("userid2" )
User user4 = (User) app.getBean ("username2" )
System.out .println (user3)
System.out .println (user4)
//bean中的IoC注入方式,往大了分为两种:构造器注入constructor,和属性注入setter
//属性注入里有基本注入,还有引用注入,引用注入又分为外部引用注入,和内部引用注入
User u1 = (User) app.getBean ("user1" )
System.out .println (u1.getNum ())
User u2 = (User) app.getBean ("user2" )
System.out .println (u2.getName ())
System.out .println (u2.getAge ())
User u2_2 = (User) app.getBean ("user2_2" )
System.out .println (u2.getName ())
System.out .println (u2.getAge ())
User u3 = (User) app.getBean ("user3" )
System.out .println (u3.getName ())
System.out .println (u3.getAge ())
People p1 = (People) app.getBean ("people1" )
System.out .println (p1.getU ().getName ())
People p2 = (People) app.getBean ("people2" )
System.out .println (p2.getU ().getName ())
People p3 = (People) app.getBean ("people3" )
System.out .println (p3.getU ().getName ())
People p4 = (People) app.getBean ("people4" )
User[] uArray = p4.getuArray ()
User u0 = uArray[0 ]
String num = u0.getNum ()
System.out .println (num)
People p5 = (People) app.getBean ("people5" )
List<User> uList = p5.getuList ()
System.out .println (uList.get (0 ).getNum ())
System.out .println (uList.get (1 ).getNum ())
System.out .println (uList.get (2 ).getName ())
People p6 = (People) app.getBean ("people6" )
Map<String,User> map = p6.getMap ()
Set <String> k = map.keySet ()
Iterator<String> it = k.iterator ()
while(it.hasNext ()){
String key = it.next ()
User value = map.get (key)
System.out .println (key+":" +value.getName ())
}
People p7 = (People) app.getBean ("people7" )
Properties pro = p7.getPro ()
System.out .println (pro.getProperty ("k3" ))
People p8 = (People) app.getBean ("people8" )
System.out .println (p8.getU ().getName ())
}
}
运行结果