一,概念
(此句为复制)
Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身,它的理念包括 IoC (Inversion of Control,控制反转) 和 AOP(Aspect Oriented Programming,面向切面编程
二,IoC(Inversion of Control)
1,IoC介绍
IoC也称控制反转,是一种概念,思想,即把对象的创建,初始化以及销毁统统交给spring容器来做,由spring来控制对象的生命周期。
DI依赖注入:Dependency Injection。
依赖注入DI是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。依赖注入是目前最优秀的解耦方式。依赖注入让Spring的Bean之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起的。
2,XML配置
1)构造注入
利用反射,通过有参构造方法设置属性值;
package com.pojo; public class User { private Integer id; private String name; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", age=" + age + "]"; } /** * 构造注入 * 必须提供有参构造方法 * @param id * @param name * @param age */ public User(Integer id, String name, Integer age) { super(); this.id = id; this.name = name; this.age = age; } }
package com.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.bb.pojo.User; public class UserTest { @Test public void test() {
//获取配置文件对象以及初始化spring容器 ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); User user = ac.getBean(User.class); System.out.println(user); } }
最后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.xsd"> <bean class="com.pojo.User" id="user"> <!-- 构造注入 ,可以通过name value 的方式设置值 <constructor-arg name="id" value="666"/> <constructor-arg name="name" value="张三"/> <constructor-arg name="age" value="18"/> --> <!-- 通过构造方法索引的方式设置值--> <constructor-arg index="0" value="999"/> <constructor-arg index="1" value="李四"/> <constructor-arg index="2" value="22"/> </bean> </beans>
2)设值注入
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.xsd"> <bean class="com.pojo.User" id="user"> <!-- 设值注入 --> <property name="id" value="22"/> <property name="name" value="张三"/> <property name="age" value="33"/> </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" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <bean class="com.bb.pojo.Cat" id="catId"> <property name="nick" value="花花"/> <property name="color" value="黑色"></property> </bean> <bean class="com.bb.pojo.User" id="user"> <!-- 通过设值注入cat对象 DI:依赖注入 调用者与被调用者之间的关系,本质上还是IOC --> <property name="cat" ref="catId"></property> <!-- <property name="cat"> <bean class="com.bb.pojo.Cat"> <property name="nick" value="小明"/> <property name="color" value="黄色"></property> </bean> </property> --> <property name="games"> <!-- 数组 --> <array> <value>LOL1</value> <value>LOL2</value> <value>LOL3</value> </array> </property> <property name="cats"> <list> <bean class="com.pojo.Cat"> <property name="nick" value="小明1"/> <property name="color" value="黄色1"/> </bean> <bean class="com.pojo.Cat"> <property name="nick" value="小明2"/> <property name="color" value="黄色2"/> </bean> <bean class="com.pojo.Cat"> <property name="nick" value="小明3"/> <property name="color" value="黄色3"/> </bean> </list> </property> <property name="map"> <map> <entry key="id" value="5"/> <entry key="name" value="王五"/> <entry key="age" value="18"/> </map> </property> <property name="prop" > <props> <prop key="url">http://xxxx/user</prop> <prop key="username">admin</prop> <prop key="password">123456</prop> </props> </property> </bean> </beans>