spring笔记1


一.概述
1.Spring是分层的Java SE/EE应用 full-stack轻量级开源框架,以IoC和AOP为内核,提供了展现层Spring MVC和持久层Spring JDBC以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE企业应用开源框架。

2.Rod Johnson(spring之父)
     Expert One-to-One J2EE Design and Development(2002)
     阐述了J2EE使用EJB开发设计的优点及解决方案
     Expert One-to-One J2EE Development without EJB(2004)
     阐述了J2EE开发不使用EJB的解决方式(Spring雏形)

3.优势:
方便解耦,简化开发;
AOP编程的支持;
声明式事务的支持;
方便程序的测试;
方便集成各种优秀框架;
降低JavaEE API的使用难度;
Java源码是经典学习范例           

二.相关概念
耦合:类之间的依赖关系称为耦合;
控制反转-Inversion Of Control:将主动new对象的方式转变为通过工厂进行被动创建的方式,称为控制反转,是一种思想转变;
依赖注入:将属性值注入到属性中的具体技术,spring中有两种依赖注入方式:构造方法注入/set方式注入;


三.环境搭建
1.导包;
4+2:4个spring核心包,2个依赖包(阿帕奇的日志包logging/log4j)
图1

2.创建类
3.创建配置文件(applicationContext.xml)
举例:
  

  1   <?xml version="1.0" encoding="UTF-8"?>
  2      
  3      <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans"
  4          xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
  5          
 12      
 13          <bean name="user1" class="huguangqin.com.cnblogs.domain.User">
 14              <property name="name" value="jack">property>
 15              <property name="age" value="18">property>
 16          bean>

4.测试
   
  1  package huguangqin.com.cnblogs.demo;
  2      import org.junit.Test;
  3     import org.springframework.context.support.ClassPathXmlApplicationContext;
  4      public class demo1 {
  5          @Test
  6          public void demoTest() {
  7              // 创建spring容器
  8             ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
  9              // 从spring容器中取user对象
 10             Object bean = ac.getBean("user1");
 11              System.out.println(bean);
 12          }
 13      }
 14 
 15 

四.依赖注入配置(applicationContext.xml)
1.set方法注入
  1     
  2     user1" class="huguangqin.com.cnblogs.domain.User">
  3          name" value="jack">
  4          age" value="18">
  5      

2.set方法注入--p名称空间注入

  1     
  2     <bean name="user3" class="huguangqin.com.cnblogs.domain.User" p:name="rose" p:age="22" p:car-ref="car">bean>

3.构造方法注入

  1      
  2     <bean name="user2" class="huguangqin.com.cnblogs.domain.User">
  3         <constructor-arg name="name" value="tom">constructor-arg>
  4         <constructor-arg name="age" value="8">constructor-arg>
  5          <constructor-arg name="car" ref="car">constructor-arg>
  6      bean>
  7      <bean name="car" class="huguangqin.com.cnblogs.domain.Car">
  8          <constructor-arg name="name" value="Benz">constructor-arg>
  9          <constructor-arg name="color" value="red">constructor-arg>
 10      bean>

4.复杂类型注入
   

  1  <bean name="cb" class="huguangqin.com.cnblogs.domain.CollectionBean">
  2          
  3          <property name="array">
  4              <array>
  5                  <value>rosevalue>
  6                  <ref bean="car">ref>
  7              array>
  8          property>
  9 
 10         
 11          <property name="list">
 12              <list>
 13                  <value>jackvalue>
 14                  <ref bean="car">ref>
 15              list>
 16          property>
 17 
 18          
 19          <property name="map">
 20              <map>
 21                  <entry key="lilei" value-ref="car">entry>
 22                  <entry key-ref="car" value="hanmeimei">entry>
 23              map>
 24          property>
 25 
 26          
 27          <property name="props">
 28              <props>
 29                  <prop key="poli">波莉prop>
 30                  <prop key="lisa">莉莎prop>
 31              props>
 32          property>
 33      bean>
 34 
 35     <bean name="car" class="huguangqin.com.cnblogs.domain.Car">
 36          <constructor-arg name="name" value="Benz">constructor-arg>
 37          <constructor-arg name="color" value="red">constructor-arg>
 38      bean>
 39