- 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())
}
}
- 运行结果