[Spring] 初识spring

来源:互联网 发布:家装网络布线图 编辑:程序博客网 时间:2024/06/05 08:41

Spring

介绍

Spring框架是一个基于Java开源的企业应用开发框架Spring模块都打包成JAR文件,其命名格式如下:spring-moduleName-x.y.z.RELEASE.jar    moduleName是模块名字,x.y.z是Spring版本号;spring-beans-4.1.12.RELEASE.jarSpring官网:http://projects.spring.io/spring-framework

依赖注入

△依赖注入和控制反转不同:http://martinfowler.com/articles/injection.html
依赖注入:你要用我的东西,我创建好了给你
1. 通过特定的set方法

public class A{    private B b; //A中要有B的实例    public void importantMethod() {        b.usefulMethod(); //A中要用到B的方法    }    public void setB(B b) { //提供B方法的人 自动调用set方法把B给你        this.b = b;    }}

2. 通过构造器的方式注入

public class A{    private B b;    ...    public A(B b){ //Spring先创建B的实例,再创建实例A,然后把B注入到实例A中        this.b = b;    }}

实现

Spring中,程序几乎将所有重要对象的创建工作移交给Spring,并配置如何注入依赖;
Spring支持XML和注解两种配置方式;

需要创建一个ApplicationContext对象;代表一个Spring控制反转容器
org.springframework.context.ApplicationContext接口有多个实现:
①ClassPathXmlApplicationContext 尝试在类加载路径中加载配置文件
②FileSystemXmlApplicationContext 从文件系统中加载

//从类路径中加载config1.xml和config2.xml的ApplicationContext创建的一个代码示例ApplicationContext context = new ClassPathXmlApllcationContext(new String[] {"config1.xml","config2.xml"});//可以调用ApplicationContext的getBean方法获得对象Product product = context.getBean("product",Product.class);//getBean方法查询id为product且类型为Product的bean对象

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">        <import resource="config1.xml"/> //导入其他xml配置文件</beans>

Spring控制反转容器的使用

  • 通过构造器创建一个bean实例

    //配置文件中<bean name="product" class="app15a.bean.Product"/>//Java代码中//该bean的定义告诉Spring通过默认无参的构造器来初始化Product类ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"spring-config.xml"});Product product1 = context.getBean("product",Product.class);product1.setName("Excellent snake oil");System.out.pringln("product1:"+product1.getName() );
  • 通过工厂方式创建一个bean实例

    //配置文件中<bean id="calendar" class="java.util.Calendar"factory-method="getInstance" />//Java程序中ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"spring-config.xml"});Calendar calendar = context.getBean("calendar",Calendar.class);
  • Destroy Method的使用
    在类被销毁前能执行一些方法,Spring可以在bean定义中配置destroy-method属性

    <bean id="executorService" class="java.util.cncurrent.Executors"factory-method="newCachedThreadPool"destroy-method="shutdown"/>//通过java.util.concurrent.Executors静态方法newCachedThreadPool来创建一个java.util.concurrent.ExecutorService实例,在Spring销毁ExecutorSerrvice实例前调用其shutdown方法
  • 向构造器传递参数
    Spring支持通过带参数的构造器来初始化类

    1. 通过参数名传递参数

      <bean name="featuredProduct" class="app15a.bean.Product">    <constructor-arg name="name" value="Ultimate Olive Oil" />    <constructor-arg name="price" value="9.95"/></bean>

      这样,在创建Product实例时,Spring会调用参数相同的构造器

    2. 通过指数方式传递参数

      <bean name="featuredProduct2" class="app15a.bean.Product">    <constructor-arg index="0" value="Ultimate Olive Oil"/>    <constructor-arg index="1" value="9.95"/></bean>

      注意:采用这种方式,对应构造器的所有参数必须传递,缺一不可

  • setter、构造器方式依赖注入

    <bean name="employee2" class="app15a.bean.Employee">    <constructor-org name="firstName" value="Senior"/>    <constructor-org name="homeAddress" ref="simpleAddress"/> //Address类的变量</bean><bean name="simpleAddress" class="app15a.bean.Address">    ...//传参给变量</bean>