Spring2.5学习笔记 [壹]

时间:2021-12-09 00:20:12

 

01_全面阐释Spring及其各项功能

(2009-12-29  9:11:23)

 

 

Spring :

  是开源的控制反转IOC和面向切面AOP的容器框架。主要目的就是为了简化企业开发。

 

IOC 控制反转:

  应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护由外部容器负责。控制权由应用转移到了外部容器,控制权的转移就是所谓的反转。

 

依赖注入:

  在运行期,由外部容器动态地将依赖对象注入到组件中。

 

 


 

 

02_搭建与测试Spring的开发环境

(2009-12-29  11:16:11)

 

 

Spring 环境所需要的jar,拷贝到类路径下

 

  下载spring-framework-2.5.6-with-dependencies.zip,提取如下2个jar


    dist/spring.jar
    lib/jakarta-commons/commons-logging.jar

 

  若使用切面编程AOP,则需提取下列3个jar


    lib/aspectj/aspectjweaver.jar 和 aspectjrt.jar
    lib/cglib/cglib-nodep-2.1_3.jar

 

  若使用JSR-250中的注解,则需提取下列1个jar


    lib/j2ee/common-annotations.jar


建立spring java项目


  1、导入所需要的jar

 

  2、在src目录下建立beans.xml,内容如下


 


  实例化spring容器

  ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});//不止一个配置文件,数组方式
  ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");//单个配置文件

 

  3、建立JUnit 测试
  在junit.test包下建立SpringTest.java,内容如下

 

 

  进行测试通过。

 

  4、在com.nbchina.service.impl包下建立PersonServiceBean.java,内容如下

 

 


  对此文件进行重构抽取接口,接口名称 PersonService

  移动接口到com.nbchina.service包下

 

  5、在beans.xml文件内加入

  

  <bean id="personService" class="com.nbchina.service.impl.PersonServiceBean"></bean>

 

  6、在测试文件SpringTest.java文件中,加入如下内容

 

  PersonService personService=(PersonService) ctx.getBean("personService");
  personService.save();

  进行测试通过。

 


 

 

03_编码剖析Spring管理Bean的原理

(2009-12-29  13:56:58)

  深刻理解怎样读取Bean。详细模拟容器读取xml代码日后加上。

 

 

 


 

 

 

 

04_Spring的三种实例化Bean的方式

(2009-12-29  14:46:58)

 

 

 

1、使用类构造器实例化                                [大部分情况下,使用类构造器实例化。]

 

<bean id="personService" class="com.nbchina.service.impl.PersonServiceBean"/>

 

2、使用静态工厂方法实例化

 


<bean id="personService2" class="com.nbchina.service.impl.PersonServiceBeanFactory" factory-method="createPersonServiceBean"/>

 

 

 

public class PersonServiceBeanFactory{
  public static PersonServiceBean createPersonServiceBean(){
    return new PersonServiceBean();
  }

}

 


3、使用实例工厂方法实例化

 


<bean id="personServiceFactory" class="com.nbchina.service.impl.PersonServiceBeanFactory"/>
<bean id="personService3" factory-bean="personServiceFactory" factory-method="createPersonServiceBean"/>

 

 

 

 

public class PersonServiceBeanFactory{
  public PersonServiceBean createPersonServiceBean(){
    return new PersonServiceBean();
  }

}

 

 


 

 

 05_配置Spring管理的bean的作用域

(2009-12-29 15:11:27)

 

 

 

1、singleton 单例模式

 


每次从容器获取bean都是同样的对象,默认的。


2、prototype


每次从容器获取bean都是新的对象
<bean id="personService" class="com.nbchina.service.impl.PersonServiceBean" scope="prototype "></bean>

 

 

 


  ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
  PersonService personService1=(PersonService) ctx.getBean("personService");
  PersonService personService2=(PersonService) ctx.getBean("personService");
  System.out.println(personService1=personService2);  //默认单例模式,输出是true。配置标注好bean作用域prototype。则输出是false

 

 

 

 

 


 

 

 

06_Spring管理的Bean的生命周期

 

 

 

1、默认情况下,单例的,在容器实例化的时候就实例化了。

 

  单例情况下,<bean id="personService" class="com.nbchina.service.impl.PersonServiceBean" lazy-init="true"></bean>,则延迟实例化,调用getBean的时候实例化

  当bean的作用域范围是 scope="prototype"的时候,在调用getBean方法的时候实例化。


2、初始化


  容器通过反射技术调用
  <bean id="personService" class="com.nbchina.service.impl.PersonServiceBean" init-method="init"></bean>
  PersonServiceBean.java内容如下

  public class PersonServiceBean implements PersonService {
    public void init(){
      System.out.println("初始化");
    }

    public PersonServiceBean(){//构造函数
      System.out.println("我被实例化了");
    }
    public void save(){
      System.out.println("我是保存方法");
    }

  }

 

  测试通过,先输出 实例化,在输出初始化。


3、释放资源


  <bean id="personService" class="com.nbchina.service.impl.PersonServiceBean" init-method="init" destroy-method="destory"></bean>
  

  public class PersonServiceBean implements PersonService {
    public void init(){
      System.out.println("初始化");
    }
    public PersonServiceBean(){//构造函数
      System.out.println("我被实例化了");
    }
    public void save(){
      System.out.println("我是保存方法");
    }
    public void destory(){
      System.out.println("关闭打开的资源");
    }

  }

 

 

 


 

 

07_编码剖析Spring依赖注入的原理-08_编码剖析Spring装配基本属性的原理

(2009-12-29 17:00:05)

 

 

编码剖析部分略,日后添加。

 

 

注入依赖对象方式两种

 

 

方式一  通过ref属性把依赖对象注入到组件内部

 

<bean id="personDao" class="com.nbchina.service.impl.PersonDaoBean"/>
<bean id="personService" class="com.nbchina.service.impl.PersonServiceBean">
  <property name="personDao" ref="personDao"/>
</bean>

 

方式二  通过内部bean的方式注入


<bean id="personService" class="com.nbchina.service.impl.PersonServiceBean">
  <property name="personDao">
    <bean class="com.nbchina.service.impl.PersonDaoBean"/>
  </property>
</bean>

 

 

1、com.nbchina.service.impl包内新建类PersonDaoBean

 

 

重构抽取接口,移动接口。

 

2、PersonServiceBean.java 内容如下

 

 

 


  

 

09_set属性方式注入集合类型

(2009-12-30 09:51:26)

 

 

如下四中集合类型,使用set方式注入

 

private Set<String> sets = new HashSet<String>();
private List<String> lists = new ArrayList<String>();
private Properties properties = new Properties();
private Map<String,String> maps = new HashMap<String,String>();

 

 

 

1、beans.xml文件

 

 

 

2、PersonService.java文件

 

 

 

3、PersonServiceBean.java 文件

 


  
4、SpringTest.java文件


 

 


 

  

 

10_使用构造器注入

(2009-12-30 09:51:26)

 

 

1、beans.xml 内容如下


 


2、PersonServiceBean.java 内容如下

 

 

 

 

 

3、SpringTest.java文件内容如下